2012年4月2日投稿 / 投稿者 : Oskar / タグ : 投稿プログラム 非実用ツール QRコード mkII専用
音声サンプリングデータを再生するプログラムです。
サンプリングレート4kHz、符号付き8-bit、モノラルの音声サンプリングデータをかなり強引に再生します。
メインモジュールの後ろに波形データを一つ追加して使います。
(例)
LOAD”OK_8BDA2”:APPEND”OK_MOHO1”
RUN
もちろん波形データを追加した状態で保存すれば、単独で実行可能なプログラムとして使えます。
MMLで、タイでつないでいる間は音色を変えられないとか、タイを使わないとチャンネル間でユーザ定義波形の開始位置が合わないとか……。
波形データのDATA文は全部手打ち!!
え、見たいって?
プチコンmkII 向けの QR コードです。*1
- ’======================
- ’ 8bitDA (OK_8BDA2)
- ’ (C) Oskar 2012.05.03
- ’======================
- GOSUB @CLEAN
- NCH=4
- PATCH=240
- GOSUB @GET_WAVE
- GOSUB @SET_INIT_FRAME
- GOSUB @SET_MML
- GOSUB @PLAY_MML
- GOSUB @REPLACE_FRAME
- END
- @CLEAN
- CLEAR
- BGMSTOP
- BGMCLEAR
- RETURN
- @READ_WAVE
- RESTORE @WAVE_SAMPLES
- I=−1
- FOR UNTIL=0 TO 0 STEP 0
- READ D$
- I=I+1
- UNTIL=(D$==””)
- NEXT
- NFRAME=FLOOR(I/NCH)+1
- NCHUNK=I
- DIM W$(NFRAME,NCH)
- RESTORE @WAVE_SAMPLES
- FOR I=0 TO NCHUNK−1
- F=FLOOR(I/NCH)
- C=I%NCH
- SHIFT=C*128/NCH
- READ WC$
- W$(F,C)=”00”*SHIFT
- W$(F,C)=W$(F,C)+WC$
- W$(F,C)=W$(F,C)+”00”*(128−LEN(WC$)/2−SHIFT)
- NEXT
- FOR I=NCHUNK TO NCHUNK+NCH−1−NCHUNK%NCH
- W$(FLOOR(I/NCH),I%NCH)=”00”*128
- NEXT
- RETURN
- @CALC_WAVE
- DIM W$(NFRAME,NCH)
- N=0
- FOR F=0 TO NFRAME−1
- FOR C=0 TO NCH−1
- SHIFT=C*128/NCH
- WT$=””
- FOR I=0 TO 128/NCH−1
- GOSUB @WAVE_FUNCTION
- WT$=WT$+HEX$(X,2)
- N=N+1
- NEXT
- W$(F,C)=”00”*SHIFT
- W$(F,C)=W$(F,C)+WT$
- W$(F,C)=W$(F,C)+”00”*(128−LEN(WT$)/2−SHIFT)
- NEXT
- NEXT
- @SET_INIT_FRAME
- FOR C=0 TO NCH−1
- BGMPRG PATCH+C,127,127,127,127,W$(0,C)
- NEXT
- RETURN
- @SET_MML
- DIM M$(NCH)
- T$=”T313”
- N$=”B96&”
- REP=FLOOR(NFRAME/2)−1
- FOR C=0 TO NCH−1
- M$(C)=”:”+STR$(C)+”L96Q8O1@D15@V127V127”
- M$(C)=M$(C)+”@”+STR$(PATCH+C)
- P1$=N$*(C+1)+”$”+STR$(C)+”=1”+N$*(NCH−1−C)
- P2$=N$*(C+1)+”$”+STR$(C)+”=2”+N$*(NCH−1−C)
- M$(C)=M$(C)+P1$+P2$
- FOR R=REP TO 251 STEP −250
- M$(C)=M$(C)+”[”+P1$+P2$+”]”+STR$(250)
- NEXT
- M$(C)=M$(C)+”[”+P1$+P2$+”]”+STR$(R)
- NEXT
- RETURN
- @PLAY_MML
- BGMPLAY T$,M$(0),M$(1),M$(2),M$(3)
- VSYNC 0
- RETURN
- @REPLACE_FRAME
- DIM VPREV(NCH)
- F=1
- FOR UNTIL=0 TO 0 STEP 0
- ’VSYNC 1
- FOR C=0 TO 3
- V=BGMGETV(0,C)
- IF V>0 AND V!=VPREV(C) THEN:ELSE @ENDIF_RW
- BGMPRG PATCH+C,127,127,127,127,W$(F,C)
- VPREV(C)=V
- IF C==3 THEN F=F+1
- @ENDIF_RW
- NEXT
- UNTIL=(F>=NFRAME OR !BGMCHK(0))
- NEXT
- RETURN
- ’======================
- ’ A wave for 8bitDA
- ’ (C) Oskar 2012.04.02
- ’======================
- ’ショウリャク (ナニ カイテモ カマワナイ)
- END
- @GET_WAVE
- ’サイセイ フレームスウ (サイコ゛マテ゛ナラ 9999)
- ’1フレーム=128サンフ゜ル
- NFRAME=9999
- GOSUB @READ_WAVE
- RETURN
- @WAVE_SAMPLES
- ’1モシ゛レツニ 32サンフ゜ル (32ハ゛イト=64モシ゛)
- DATA 0001020202020201010000FEFEFEFEFEFEFF00010101010100FFFFFEFDFDFDFD
- DATA FE0206090B0C0B080400FDFAF9F8F9FAFC0005090B0C0A08060301FFFEFCFDFD
- DATA FD0711181D1C160D02F8EFE8E6E5EBF101223E52575143290DF4DFD4CFD2DBE3
- DATA FE1B303C3A34251204F7F1EEECF0EEF6001C292A27200FFEEDE0D8D3D7D8E50A
- ’・・・
- ’ショウリャク (DATA フ゛ンヲ ス゛ラス゛ラ ナラヘ゛ル)
- ’・・・
- ’サイコ゛ハ カラモシ゛レツ
- DATA ””
- ’========================
- ’ A sine wave for 8bitDA
- ’ (C) Oskar 2012.04.02
- ’========================
- END
- @GET_WAVE
- ’サイセイ フレームスウ
- ’1フレーム=128サンフ゜ル
- NFRAME=50
- GOSUB @CALC_WAVE
- RETURN
- @WAVE_FUNCTION
- ’マイカイ タ゛イニュウスルノハ ムタ゛タ゛カ゛ キニ シナイ
- RATE=4000
- FREQ=440
- OMEGA=FREQ*2*PI()
- ’N:サンフ゜ル シ゛コク (ハ゛ンコ゛ウ 0−)
- ’X:サンフ゜ル シンフ゜ク (−128<=X<=127)
- ’シシャコ゛ニュウノ ホウカ゛ ヨイカ゛ キニ シナイ
- X=127*SIN(OMEGA/RATE*N)
- RETURN
この作品に対するコメントがあれば一言どうぞ。(作品に直接関係ない質問や雑談は掲示板へ)
*1
2012.4.3: 高DPIディスプレイで読み取りにくそうなので、Wiki側の設定で拡大しました。元データの拡大版も用意しましたが添付済みのファイルはユーザが更新できないようなので。
表示モード : [ スマホ・3DS対応表示 | クラシック表示 ]
PukiWiki 1.4.7 Copyright © 2001-2006 PukiWiki Developers Team. License is GPL. Based on "PukiWiki" 1.3 by yu-ji
ページの処理時間 : 0.159 秒 | このページの最終更新 : 2022/09/20 (火) 12:43:56 (565d) | ログイン
Copyright(C) 2011-2014 プチコンまとめWiki ◆1sxkymI8ji30