コミュニティアイコン プチコン 非公式コミュニティ トピック

アバター
SquidSky ◆qhyT2aHAyMJC
2018/6/28 6:35
協力
WAVファイル再生に挑戦
私はいつかプチコン3号・BIGでWAVファイルが再生できたらなぁ、と思っていました。
既にmkllではいくつか方法がありますが、まだこちらではありません。
reiさんのPetitMovieCreatorに使われているADPCMの圧縮方式を使う手段もありますが、やはり生を再生したいですね。
(3DSにとってはADPCMは都合がいい?ソフト内ではサウンドにDSP ADPCMが使われているのですが。)

コメント

アバター
sou51 2018/6/28 10:56 ◆43Xlfv8b6OL9
ヘッダ部分を拾って、データ部分を、高度サウンド機能ユニットへ渡してやればWAVファイル、割と簡単に行けます!(非公開のテトリスでBGMを流すのにこの方法使いました)
ファイルサイズがそれなりにでかいので転送に時間がかかりました。
あとメモリも喰いますね
アバター
あまさとしおん 2018/6/28 16:25 ◆mzDKTVUAtwqE
プチコンにとって言えば、ADPCMよりも生が都合が良いです。
生ならPCMSTREAMに投げられます。
アバター
SquidSky 2018/6/28 19:47 ◆qhyT2aHAyMJC
え、意外と簡単なのですね。
数値配列化したWAVデータをPCMSTREAMに渡しちゃえばすぐできるものなんですか?
それは知らなかった。
アバター
ZEX 2018/6/29 1:05 ◆RrwFtq39WJM3
WAVSETA 224,127,127,127,127,LOADWAV("TEST.WAV"),91
BGMPLAY"@224O4A1"

DEF LOADWAV(FNAME)
DIM W%[0]
LOAD"DAT:"+FNAME$,W%,0
REPEAT:UNTIL SHIFT(W%)==&H61746164
VAR S%=(SHIFT(W%)+3)>>2
IF S%>4096 THEN S%=4096
DIM E%[S%*4],I%,J%:DEC S%
FOR I%=0 TO S%:J%=I%*4
RGBREAD W%[I%]OUT E%[J%+3],E%[J%+2],E%[J%+1],E%[J%]
NEXT
RETURN E%
END

高度サウンドユニット無くても、これで2.048秒だけWAVファイルを再生できる。
WAVファイルは 8ビット 1チャンネル でなければならない。
周波数は8000Hzがお勧め。
周波数を変更する場合は91って所で音程を調節するんだ
アバター
MIKE猫Soft 2018/6/29 18:41 ◆WlLT6KG2mCMu
(修正しました)
プチコンでは、標準8180Hzで、あげられるらしいです。
8bit unsigned らしいですから、音質が微妙に悪いんです。
主に扱われるサンプリングレートが、
44.1kHz 16Bit ステレオ(DVD音質)らしいので、高度サウンドユニットなら波形データを抜き出せば、そのまま行けちゃいます。
(つまり、PCMSTREAM命令で行ける。ただ、有料コンテンツらしいので、お小遣い一文もないという人は、悪しからず。また、専用プログラム化してしまうと、ダウンロードするユーザーが少なくなるということで、ZEXさんのやり方がいいかと思います)
構造を知りたい人はこちらから↓
http://www.graffiti.jp/pc/p030506a.htm
ZEXさんの場合、説明してある通り、Wavのサンプリングを落とさなければいけないので、
専用のソフトで↓
https://www.vector.co.jp/soft/winnt/art/se484434.html
(説明と使い方は、省略させていただきます。)
やっていただけるといいと思います。
もしくは、そういう処理自体を、プチコン3号でやるか...
アバター
SquidSky 2018/6/30 7:15 ◆qhyT2aHAyMJC
なるほど、結構意外と簡単ですね。
試してみようと思います。
アバター
MIKE猫Soft 2018/6/30 11:56 ◆WlLT6KG2mCMu
お役に立てて、非常にうれしいです。
アバター
ZEX 2018/6/30 13:44 ◆RrwFtq39WJM3
WAVSETA の説明に「8180Hz固定」って書いてあるけど
あれ嘘だから!
WAVSETAの tone 指定でどうにでもなる。
toneの値を61にすれば44100kHzでも再生可能だ。
「一般のwavファイル」なんて定義は知らないけど44100HzはCD音質、48000HzはDVD-Audio音質だよ
当然、サンプリング周波数上げればデータ量は倍増する。
周波数8000Hz→16000Hzなら単位時間当りのデータ量は2倍
32000Hzなら4倍、44100Hzなら5.5125倍、48000Hzなら6倍にもなる。
メモリ容量の厳しいSmileBASICでこのデータ倍増はキツイ、
データ減量を考慮するなら8000Hzでも聴けなくはないと思う。
周波数を下げると高音が聴こえなくなる、籠もって聴こえるのはそれが原因だ。
高音の楽器だけ高い周波数のWAVにするとか、場合分けすればいい。

WAVSETAで設定できるサンプル数は16384サンプルまでしか登録できない。
これは再生時間で
8000Hzでは2.048秒
16000Hzでは1.024秒
32000Hzでは0.512秒
44100Hzでは0.371秒
48000Hzでは0.341秒
となり、かなり短い。
だが、WAVSETAはユーザー定義楽器音番号:224〜255まで32個登録できる、
WAVファイルを切り出してWAVSETAに登録し、連続で再生すれば8000Hzの場合、最大65.536秒の再生が可能だ。

高度サウンドユニットはたしかに便利だけど、ごく一部のマニアしか持ってないので
高度サウンドユニット専用プログラムにしてしまうとユーザー数がガタ落ちする覚悟が必要だ。
アバター
MIKE猫Soft 2018/6/30 14:59 ◆WlLT6KG2mCMu
あ、そうだった! 忘れっとった!(しもうたぁぁぁぁぁぁぁぁぁぁぁ)
アバター
MIKE猫Soft 2018/6/30 15:09 ◆WlLT6KG2mCMu
>>WAVSETA の説明に「8180Hz固定」って書いてあるけど
あれ嘘だから!
すみません!そうでしたね。すっかり忘れていました。
>>「一般のwavファイル」なんて定義は知らないけど44100HzはCD音質、48000HzはDVD-Audio音質だよ
すみません。説明不足でした。ここでの「一般のwavファイル」は、このサンプリングで、平均的に扱われていると思われるファイルの事を指そうとしました。
>>高度サウンドユニット専用プログラムにしてしまうとユーザー数がガタ落ちする覚悟が必要だ。
金銭面から考えるとそうなりますね。すいません。
アバター
あまさとしおん 2018/6/30 16:30 ◆mzDKTVUAtwqE
詳しいことはミーバースのれい氏の書き込みがよさげだが、いまはグーグルにミーバースの書き込みはヒットしないようだな。
終了直後はグーグルのキャッシュが便利だったが。
アバター
あまさとしおん 2018/6/30 16:33 ◆mzDKTVUAtwqE
サンプリングレートは2の累乗じゃないと折り返し雑音が出るとか言う趣旨を見た記憶があるんだが
アバター
あまさとしおん 2018/6/30 16:37 ◆mzDKTVUAtwqE
間違えました。
サンプリングレート→サンプル数
です。
アバター
ZEX 2018/6/30 17:45 ◆RrwFtq39WJM3
周波数を8000Hz→16000Hzにするなら再生速度も2倍にしなければ音程が合わなくなる。
再生速度を2倍するということは1オクターブ上げなければならないのだ。
WAVSETAの tone は 1 減らすと半音上がる。
なので12減らすと1オクターブ上がる。
8000Hzのとき tone には 91 (耳コピ調整した値)を指定したので
16000Hzなら恐らく 91−12=79 だろう。
32000Hzなら更に1オクターブ上げる。

WAVSETAの tone の値は69が標準みたいなんだけど、
何に対しこの値を設定したのか不明だし、どう計算するのが正しいのかも解らない。
なので感覚で調整するしかない。
tone の値は半音単位というザックリ値なので、完全に原曲に合わせるのは無理かも知れない。
そんな時はMMLのディチューンコマンドで調整するしかない。
アバター
ZEX 2018/6/30 18:53 ◆RrwFtq39WJM3
>サンプル数2の累乗じゃないと折り返し雑音が出る
そうなのだろう。
WAVSETAは波形登録するものなので、
短いサンプル数で登録してMMLで音色指定し、再生中は繰り返す。
その繰り返す動作が、2のn乗サイズのリングバッファとして再生しているのだろう。
サンプル数が2のn乗サイズに足りない場合、そこには0か128(中央値)もしくはゴミが入っている。
波形は通常、なだらかに変化するが、急激な変化があると、その部分はプチノイズとなって聴こえるのだ。
だが、サンプル数を長めに取り、1回だけ再生するならプチノイズには遭遇しない。(時間ぴったりに再生を止めるのが難しいかもだが)
アバター
ZEX 2018/7/1 14:44 ◆RrwFtq39WJM3
BEEP命令でも鳴らすことはできる。
BGMPLAYをBEEP 224に代えるだけだ
だがBEEPはバグがあり、登録した波形を最後まで再生してくれない。
せめて再生時間を指定できると良いのだが。
社長さんにはこのバグを認識し、修正して頂きたい。
アバター
SquidSky 2018/7/1 20:23 ◆qhyT2aHAyMJC
ふむ、BEEPにバグですか。
聞いてみます。
アバター
あまさとしおん 2018/7/3 14:37 ◆mzDKTVUAtwqE
いまだけミバのアーカイブ見れるので

例のれい氏の書き込み貼っとく
http://kani.cf/posts/AYMHAAACAAADVHkP77VM1g
アバター
あまさとしおん 2018/7/3 14:41 ◆mzDKTVUAtwqE
ちなみに私はサンプリングレートは効率重視で8182Hz、音質重視で16364Hzを愛用しています

コメントを書く

  • こちらは「プチコン3号」「プチコンBIG」など、プチコンシリーズに関する話題を扱ったコミュニティです
  • プチコンシリーズにまったく関係ない書き込みはご遠慮下さい。削除の対象となります
  • こちらにはその他のゲームや雑談のコミュニティはなく、作る予定もありません (ひとりで管理できないため)。ごめんなさい
  • ユーザー登録なしで書き込みができます
  • 秘密の合い言葉は成りすましの防止 (トリップ機能)、書き込みの編集時の本人認証に使用します
  • 秘密の合い言葉に他人に推測されやすい言葉、他サービスと同じパスワードは入力しないでください。
  • 書き込むと、投稿時に入力したお名前と秘密の暗号が記憶され、ログイン状態になります

- WEB PATIO -