プレイ日記
SquidSky ugomemo_gorohati
これ、リアルタイムにマイクからの音声が再生されるんですが…実はそうはいきません。0.1秒録音しているのを待機しているにも関わらず、再生時に音がブツブツとなりロボットのような音になってしまいます。どうすればいいのでしょうか?
5そうだね
プレイ済み
返信[1]
親投稿
まずWAIT 1が0.1秒じゃないというツッコみ。
4そうだね
プレイ済み
返信[2]
親投稿
SquidSky ugomemo_gorohati
え!?MICSTARTの0.1秒はWAIT 1では表せないのですか? ということは、録音時間の指定の問題ですね。 まず、整理をしてみます。 MICSTARTの録音時間は、秒数で指定する。 となると、1秒のうちの1%、60÷0.1になる…答えは600。 え。これって計算式がおかしい気がする…
0そうだね
プレイ済み
返信[3]
親投稿
ぺぃ shiba_petitcom
6f=0.1秒なので、WAIT 6。
2そうだね
プレイ済み
返信[4]
親投稿
うにゃ??? 60(フレーム毎秒)*0.1(秒数)
0そうだね
プレイ済み
返信[5]
親投稿
SquidSky ugomemo_gorohati
いや、これは合ってますね…? 算出されたのは、600ミリ秒ということか…な? でもWAITが実数に対応していないので、0.06ができません… AWAIT 600とできれば…。 あ、出来るかもしれません。 WHILEループでMILLISEC+600になるまで待機させれば、上手く行くかもしれませんね。
0そうだね
プレイ済み
返信[6]
親投稿
まあ、そもそもフレームは当てにすべきじゃないんだけど(厳密には60フレームは1秒にならないので)
1そうだね
プレイ済み
返信[7]
親投稿
そもそもはCHK()の類があるんじゃないかと思うけど
0そうだね
プレイ済み
返信[8]
親投稿
SquidSky ugomemo_gorohati
すれ違いました。やはり算出式が間違っていましたね。(._.;)
1そうだね
プレイ済み
返信[9]
親投稿
(MILLISEC+600ってなんだ) MILLISECはミリ秒だぞ(フレームとは関係が無い)
0そうだね
プレイ済み
返信[10]
親投稿
SquidSky ugomemo_gorohati
(プチコン初心者になってきた件)
3そうだね
プレイ済み
返信[11]
親投稿
ぺぃ shiba_petitcom
ほうほう。1秒あたり約60fだが60f=1秒という訳ではないのか。 リアルタイム録音なら毎フレームではなくて1秒ごとで事足りると思う。
2そうだね
プレイ済み
返信[12]
親投稿
でも調べてみたらPCMCHK()が無いだと??? いや、BGMにもTALKにもあるのにPCMだけ冷遇とかやめてよ感
0そうだね
プレイ済み
返信[13]
親投稿
Mc mc014483
以前、WAITは処理による遅延込みの1フレーム(1/60s)、VSYNCは遅延無視の1/60sだと理解したのですが。違いますか?
2そうだね
プレイ済み
返信[14]
親投稿
WAITとVSYNCの違いはそれであってるけど、「60フレーム=1秒」自体が誤差があるってだけ。
0そうだね
プレイ済み
返信[15]
親投稿
SquidSky ugomemo_gorohati
今改良していていいのができました。 始めに、少し録音し配列に保存します。 そして、ループに入る前にPCMSTREAMを一度実行し、ループ内からいちいちPCMSTREAMを呼び出さず、配列に順次注ぎ込んでやる処理だけをします。こうすればほぼプツプツも解消され、スムーズに動作するようになりました。 波形を表示するのもモロコミでやっていたので…
1そうだね
プレイ済み
返信[16]
親投稿
SquidSky ugomemo_gorohati
どうやらPCMSTREAMは、内部バッファに転送はしていますが、配列の終端に行く度に配列を読み込みながら転送しているようなんです。 なのでその特徴を生かして、配列に再生が終わるまでに配列を置き換えれば、上手く繋がって再生されるというわけです。
1そうだね
プレイ済み
返信[17]
親投稿
Mc mc014483
60フレーム!=1sec.か。 電気信号だし仕方ないか。しかし、人間の目で確認できる誤差ではないはず(であることを信じる)。 【結論】正確な時間を計りたいなら (^^)っ[セシウム原器]
0そうだね
プレイ済み
返信[18]
親投稿
そもそもはフレームって画面を書き換える間隔なので、秒とかいう単位と噛み合うことを気にしていないってだけね。
1そうだね
プレイ済み