トピック
受付中

PCMSTREAMのリアルタイム再生でノイズが乗る

公開キー「QD3J3XLD」PCMSTREAMを用いてリアルタイムで波形を生成&再生しようとしているのですが、高調波ノイズがのってしまいます。リアルタイムではなく、予め波形をPCMSTREAM用バッファに書き込んで置く方法だと波形は問題なく再生できます。何か処理の仕方に問題があるのでしょうか?コードの添削お願い致します!
5そうだね
プレイ済み
返信[1]
親投稿
公開キーはQDSJ3XLDでした。ごめんなさい。
0そうだね
プレイ済み
返信[2]
親投稿
どっかで見たパターンだな…忘れたorz
1そうだね
プレイ済み
返信[3]
親投稿
すう SU-KUN
もしかしたら全くの見当違いかもしれませんが、すうの場合はRINGCOPYを使うとうまくいかず、普通にCOPY命令にして対応した覚えがあります(バッファが端まで行っても、先頭にリング状につながらなかった覚え)。 RINGCOPY OBF,(1-OBF_POS)*WBF_MAX,WBF ↓ COPY OBF,OBF_POS*LEN(WBF),WBF あとはPCMPOSを見て、書き込みタイミングを計ってる感じでしょうか。 SMILE BASIC MAGAZINの1号に、スマイルブーム音楽スタッフさんの書いた説明記事があるので、後で確認してから(明日以降になるかも…)、またコメントしたいと思います^^(実はまだ読んでない(笑))
0そうだね
プレイ済み
返信[4]
親投稿
Oskar oskar_liebig
詳しくは見られて(聞けて?)いませんが、デフォルトの32730Hzでは大丈夫そうですね。 プチコンBIGでも(PCMSTREAMがまだバグありのようですが)とりあえず試してみました。MICSTARTなどの仕様から推定されるネイティブの32000Hzなら大丈夫でしたが、32730Hzはだめでした。 根拠なしの邪推ですが、まさか、内部的にサンプリングレート変換が走る場合、再生バッファを全部使わず端数を飛ばしてループしているのかな……
0そうだね
プレイ済み
返信[5]
親投稿
コメントありがとうございます。 結論から言うとその場しのぎの対応で一応は何とかなりました。 サンプリングレート(SAMPLERATE)を44100から32730に変えたら素直(?)な音が出ました。 ただ、それ以外のサンプリングレートにするとたちまちノイズというか高調波が出てくるという… 正直理屈がよくわかりませんが…
0そうだね
プレイ済み
返信[6]
親投稿
>あまさとさん 以前にも同じ様なことがあったってことですかねorz >すうさん 私の環境(new3DS)では今のところRINGCOPYは正しく機能しているようです。 そういえば、確かにスマイルベーシックマガジンにサウンドユニットの使い方乗っていましたね。 寝かせたままだ(汗)、あとで確かめてみます。 >Oskarさん おっしゃる通りに32730Hzで試したら上手くいきました…ありがとうございます。 BIGだとまたサンプリングレートを変えないと動かないんですね。大変です… ストリーム再生の仕組みはよく理解できていないのですが、おっしゃる言葉を頼りに原因を探りたいと思います。
0そうだね
プレイ済み
返信[7]
親投稿
32730Hzと言えば、3DSのDSPが32728Hzとか言う事情の関係かな?
0そうだね
プレイ済み
返信[8]
親投稿
すう SU-KUN
Oskarさんのおっしゃる通り、周波数を32730の倍数にしないと音が極端に歪んでしまうようです(32730でも歪んでいるように聞こえますが…)。旧3DSで試した時は、32730の2倍の65460HZで、最も音質が良くなった覚えがあります。 もーたさんのプログラムの場合、それでも2秒に一度、ぷつぷつとしたノイズが乗りましたが、周波数を32730の3倍にした場合はほぼノイズがなくなるようです。ただ、再生周波数と生成周波数との誤差によっての歪みは避けられないようです…(BGMPLAYでも歪んでしまう)。 プチコンって、あまり音周りが良くない印象ありますね…。最終的に、BEEPやBGMPLAYなど、全ての出力を内部で同一の周波数にミキシングしているようで、そのあたりのリサンプリングのせいでしょうか。
2そうだね
プレイ済み
返信[9]
親投稿
すう SU-KUN
BIGも、3号以上に音が変になってる気がする(音がこもったり、すでに矩形波に聞こえない場合が)ので、不具合として修正されればいいですけどね^^; >あまさとさん 3DSではなくDSのハード仕様を引っ張ってきてるみたいです。恐らくハードウェア的には周波数可変になっているものの、mkIIからの音源移植で同じ音周りプログラムを流用しているんじゃないかと…。
3そうだね
プレイ済み
返信[10]
親投稿
ちょっと波形まわりはここ読んでみるといいかも https://miiverse.nintendo.net/posts/AYMHAAACAAADVHkP77VM1g?locale.lang=ja-JP
2そうだね
プレイ済み
返信[11]
親投稿
(なぜか後ろに言語指定ついたけど気にしないで)
0そうだね
プレイ済み
返信[12]
親投稿
DSから引っ張ってきたのかなぁ 調べてみるか
2そうだね
プレイ済み
返信[13]
親投稿
DS DSPとかググっても普通に要らない情報ばかりなので詰んだけど
2そうだね
プレイ済み
返信[14]
親投稿
すうさんも、あまさとさんもありがとうございます。 うーん、私としてはプチコンは「ありがたく使わせてもらう安定したツール」であって欲しかったのですが、 そういう前提も疑って作らなければいけないようですね。知識の乏しい私では中々にてこずります…
3そうだね
プレイ済み
返信[15]
親投稿
どうにもゲーム機故の変な仕様が多かったり… まあ私はファーストプログラミングがプチコンなんでむしろ標準なのでほぼ気にならないんだけど。
3そうだね
プレイ済み
返信[16]
親投稿
SquidSky ugomemo_gorohati
mkllは、BEEP 1がまるで昔のプログラムテープ読み込み音みたいな「ゴゴゴゴゴ」という音でしたけど 3号は、「シーッ」としっかりしたノイズです。 音質はかなり改善されてるようですね。
1そうだね
プレイ済み
返信[17]
親投稿
MIKI ifconfig
PC のライン入力に繋いで PC 側で FFT してみました。 まずリファレンスとして 1kHz -20dBFS 信号 http://www.jppanet.or.jp/documents/audio.html を mp3 に変換したものを標準の「ニンテンドー3DSサウンド」で再生した場合 信号(1kHz)に対してノイズは -60dB 以下です。 対してもーたさんのプログラムを実行した場合は、倍音や倍音の折り返しノイズがひどくて -40dB 程度ありますね。(440Hz でも 1kHz でも) 32728Hzまたは32730Hzで再生した場合は、倍音はほぼ消えて、唯一 3 倍音だけが残りそれが -40dB です。 16364Hzの場合は信号とその3倍音の鏡像(15920Hz)が-30dBくらい出てきます。 総じてリサンプリングの処理がまずいようですね。
4そうだね
プレイ済み
返信[18]
親投稿
MIKI ifconfig
PCM で音ゲーを作る予定なので大変参考になりました。 16364Hzで再生予定ですが、PC側でちゃんとローパスフィルタかけて折り返しノイズを除去した波形を3DS側に持って来ないとダメみたいですね。 64bit OS だと 5分くらいの曲は余裕でオンメモリで FFT -> IFFT できるので、フィルタ処理も大変楽になりました。
1そうだね
プレイ済み
返信[19]
親投稿
Oskar oskar_liebig
どうやら二つ問題があるようです。 一つは、プチプチぶつぶつ音がする問題。PCMSTREAMで指定したサンプリングレート・配列サイズ・プチコン内部や3DSの表面上出てこない値のうちのいくつかが、何かが何かの整数倍といった特定の関係に合致しないと発生するようです。単なるバグなのかもしれません。 もう一つは、音がキーンとしたり歪んで聞こえたりする問題。おそらくMIKIさんのおっしゃっているように、ハードウェアのサンプリングレートへ合わせるためにプチコンが内部で実行しているサンプリングレート変換(リサンプリング)がタコだから、というのが一番考えられそうな線です。1,000円+500円のソフトに改善を求めるのは酷だと思うけど、ちょっと残念だなーと思います。
3そうだね
プレイ済み
返信[20]
親投稿
スマイルブームさんに、 このトピックで挙げた公開キープログラムで「指定したサンプリングレートによってはノイズが乗る」旨を問い合わせた結果、 ノイズは「(サンプリングレートの)変換誤差による仕様」との言葉をいただきました。 また、プチコンBIGではサンプリングレート32000hzが最も聴感が良いとのアドバイスもいただきました。 書き込むべきかどうか迷ったのですが、ユーザー間での仕様の情報共有が大事であると思い、 問い合わせた結果を投稿しました次第です。
1そうだね
プレイ済み
返信[21]
親投稿
すう SU-KUN
もーたさん、お問合せ、情報ありがとうございます。 仕様ですかぁ><;改善されたら嬉しいのに… 音を聞いた感じで、リサンプリング時に、周波数誤差の少数部分は端折って、ローパスフィルターだけ通してる感じなんでしょうね。せめて線形補完してもらえたらと… あと余談にはなりますが、BIGの方更新しても、シンセの方は変わらずブツブツとノイズが乗ってました…(時間ができたら、プログラム、見直してみたいです)
1そうだね
プレイ済み
返信[22]
親投稿
MIKI ifconfig
ご報告ありがとうございます。 問い合わせメールですよね? あれはスマブの公式な回答であり、同じ質問をすれば同じ回答が返ってくるはずのものです。なので回答を公開しても問題ないと私は考えています。 (ので私自身も結構公開しています)
1そうだね
プレイ済み
返信[23]
親投稿
>すうさん 私も「仕様」という言葉は正直聴きたくなかったです… >MIKIさん はい、サポートページで問い合わせて、 メールで返ってきた結果です。 なるほど、今回は悩んだ末の投稿でしたが、 公式回答であれば公開しても問題ないという意見は賛成です。
4そうだね
プレイ済み