問題タブ [audioqueueservices]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
iphone - Audio Queue Services を使用して次のファイルを再生する方法
Audio Queue Services を使用して次のファイルを再生する正しい方法は何ですか? 「次を再生」ボタンが押されたら、最初に AudioQueueStop を呼び出してから AudioQueuePrime/AudioQueueStart を呼び出す必要がありますか、それともバッファを次のファイル データで埋めるだけで十分ですか?
問題は、後者を使用すると iPhone で音の不具合が発生することです。
iphone - iPhone の Audio Queue Services は、キューに入れられた最初のバッファのみを再生しますか?
私はこれを理解しようとして一晩中起きていました。私のコードは、Apple の例hereと基本的に同じです。ただし、デバイスはキューに配置された最初のバッファーのみを再生します (アプリの起動時に最初のバッファーの内容が聞こえます)。その後、デバイスからまったく音が出なくなります。AQS が関数を起動し続けているため、再生はまだ実行されていAudioQueueOutputCallback
ます。さらに、AQS を呼び出すたびに 0 が返されるため、何も失敗しません。
AudioQueueEnqueueBuffer
これで、 WITHIN コールバック関数から呼び出す限り、後続のバッファーを再生できます。AudioFileStream_PacketsProc
これは機能しません。データがソケットから にシネマとしてコールバック内からバッファを埋めてキューに入れることしかできないからAudioFileStreamParseBytes
です。
他の誰かがこの問題を抱えていますか?私にはAQSのバグのようです...
ありがとう、アンドリュー
iphone - AudioQueueGetProperty が kAudioQueueProperty_CurrentLevelMeter プロパティの範囲外の値を返す
ユーザーが静かな環境にいる必要があるアプリケーションを作成しています。これを行うために、私は定期的にマイクロホンのパワー測定値をチェックします。(返される値が dBFS であるか、この場合は間隔 [0, 1] の浮動小数点数であることを認識しています。)
私の問題は、以下のコードが正常に機能することです... 18466064732283753157623808.00000 を返す場合を除きます。AudioQueueGetProperty が失敗を返すことを示す NSLog 出力が表示されません。奇妙な値は常に言及された値です。
何を与える?値のビットパターンはおそらく手がかりを与えるでしょうか?
iphone - AudioQueueBuffer オーディオ データを操作するとノイズが発生する
SpeakHere サンプル アプリを出発点として、iPhone サウンド処理アプリを実装しようとしています。このアプリでは、再生中にバッファリングされたオーディオ サンプルを操作します。サンプルに分数 (たとえば 0.9) を掛けると、結果としてノイズが発生します。最も奇妙な点は、サンプルを整数 (1.0、2.0 など) で乗算したり、サンプルに加算または減算したりすると、再生音が期待どおりに聞こえることです。
次のコード スニペットを使用して、AudioPlayer.m の PlaybackCallback 関数で実行しています。
完全なプロジェクトはここからダウンロードできます: http://depositfiles.com/files/lmnkq68n8
誰かが私が間違っていることを教えてもらえますか? 私はすでに数日間苦労しており、完全に迷っています。
ありがとうございました!
iphone - Audio Queue: 録音バッファのタイムスタンプ
AudioInputCallback
記録キューの関数で、記録されたバッファから時間を取得しようとしています。残念ながら、私が見ているタイムスタンプは期待どおりではありません。以下に例を示します ( を使用AudioTimeStamp.mHostTime
):
最初のタイムスタンプはバッファ時間、2 番目は参照時間 (ボタンが押された時間、私は を使用していますAudioQueueDeviceGetCurrentTime
)、3 番目は 2 つの間のデルタです。予想どおり、バッファーは「リアルタイム」でわずかに遅れ、いくつかのバッファー コールバックが実行された後に追いつきます。
このキューを閉じて再度開くと、話は大きく異なります。
ご覧のとおり、タイムスタンプ (ns だと思いますか?) は 2 回目とは大きく異なります。数秒間、リアルタイムに追いつきません。この動作はまったく再現できません。タイムスタンプが正しい場合もあれば、間違っている場合もあります。ただし、最初にキューを開くときは常に間違っています。
iphone - 中断後、録音時の音声ルート変更通知が遅延
私の iPhone アプリケーションでは、ユーザーがいつヘッドフォンを接続したか、または接続していないかを知る必要があります。簡単だ。kAudioSessionProperty_AudioRouteChange をリッスンするコールバックを持つ AudioSessionAddPropertyListener。
何かが起こると、NSLog でログを書きます。ユーザーはヘッドフォンを接続しますか? 通知を受け取り、gdb コンソールに行を表示します。ユーザーはヘッドフォンを取り外しましたか? 同上。
同時に、録音オーディオ キューを開始して、環境のノイズ レベルを感知しています。これもうまく機能します。マイクのノイズ レベルを取得し、オーディオ ルートの変更を問題なく聞くことができます。
私が見つけたのは、中断した後、オーディオ セッションを再アクティブ化し、オーディオ カテゴリを kAudioSessionCategory_RecordAudio に復元したところ、オーディオ ルート通知が少しおかしくなったということです。
ヘッドフォンを接続しても、通知が表示されません。ヘッドフォンのプラグを抜くと、「プラグイン」通知と「プラグ抜き」通知の両方が立て続けに表示されます。
これは、「接続された」通知が遅れ、「接続されていない」通知が到着すると、保留中の通知のキューがフラッシュされるようなものです。
私は何を間違っていますか?時間のかかる通知を受け取るためにオーディオ セッションを正しく復元するにはどうすればよいですか?
編集: iPhone 3G で動作する iPhone OS 3.1.2。3.0 SDK (XCode 3.1.2 内から) でコンパイルされたプログラムを実行しています。
objective-c - Objective-c-オーディオファイルを再生可能な小さなパケットにシリアル化する方法は?
そこで、サウンドファイルを取得してパケットに変換し、別のコンピューターに送信したいと思います。他のコンピュータが到着したパケットを再生できるようにしたいと思います。
AVAudioPlayerを使用してこのパケットを再生しようとしていますが、peer2が再生できるpeer1のデータをシリアル化する適切な方法が見つかりませんでした。
シナリオは、peer1にオーディオファイルがあり、オーディオファイルを多数の小さなパケットに分割し、それらをNSDataに配置して、peer2に送信することです。ピア2はパケットを受信し、到着すると1つずつ再生します。
誰かがこれを行う方法を知っていますか?またはそれが可能であっても?
編集:
これは、私が達成したいことを説明するためのコードです。
それで、これが私が達成しようとしていることです...それで、私が本当に知る必要があるのは、peer2がオーディオを再生できるようにパケットを作成する方法です。
一種のストリーミングになります。はい、今のところ、パケットの受信または再生の順序については心配していません...サウンドをスライスするだけで、ファイル全体を待たずに、各ピース、各スライスを再生できます。 peer2によって受信されました。
ありがとう!
objective-c - iPhoneでオーディオを録音し、NSOutputStreamを使用してネットワーク経由で送信する
内蔵マイクからの音声を録音し、その音声データをサーバーに送信して処理する必要があるiPhoneアプリケーションを作成しています。
アプリケーションは、ソケット接続を使用してサーバーに接続し、オーディオキューサービスを使用して録音を行います。私が確信していないのは、実際にいつデータを送信するかです。オーディオキューサービスは、バッファがオーディオデータでいっぱいになるたびにコールバックを起動します。NSOutputStreamは、使用可能なスペースがあるたびにイベントを発生させます。
私の最初の考えは、AudioQueueコールバックでサーバーにデータを送信することでした。ただし、NSOutputStreamにその時点で使用可能なスペースがない場合、これは問題に遭遇するようです。
次に、オーディオキューから返されるデータをバッファリングし、NSOutputStreamが空き領域イベントを発生させるたびにデータを送信することを検討しました。しかし、サーバーへの送信がオーディオ録音よりも進んでいる場合、これは問題があるように思われます。その場合、使用可能なスペースイベントに何も書き込むことができない状況が発生するため、イベントは再度発生せず、データ転送が行われます。事実上失速します。
では、これを処理するための最良の方法は何ですか?繰り返し起動するタイマーを用意して、使用可能なスペースがあり、送信する必要のあるデータがあるかどうかを確認する必要がありますか?また、バッファからデータのチャンクを取り出してネットワーク経由で送信できるようにするだけでなく、バッファを操作するリスクを冒さずに記録が進むにつれてデータのチャンクをバッファに追加できるように、スレッドの同期を行う必要があると思います。
iphone - イベントに応答して既存の AudioQueue の書き出しを開始するには?
AudioQueue を開いてその特性を分析し、特定の条件下で、すでにインスタンス化されている AudioQueue からファイルの書き出しを開始または終了できるクラスを作成しています。これは、tmp に何も書き出さずに AudioQueue を開く私のコード (完全に SpeakHere に基づく) です。
しかし、このキューに「今から停止信号まで、このキューをファイルとして tmp に書き出すことを開始する」ように指示する関数を作成する方法が少しわかりません。AudioQueue が作成されたときにファイルとして書き出すように指示する方法、ファイル形式を設定する方法などは理解していますが、途中で開始および停止するように指示する方法は理解していません。ポインタに感謝します、ありがとう。
objective-c - オーディオの録音中の AudioQueueServices コールバックの予期しない動作
AudioQueueServices を使用してデータの連続ストリームを記録しています。バッファがデータでいっぱいになったときにのみコールバックが呼び出されることを理解しています。実際には、最初のコールバックはバッファがいっぱい、2 番目のコールバックは 3/4 いっぱい、3 番目のコールバックはいっぱい、4 番目は 3/4 いっぱい、というように続きます。これらのバッファは 8000 パケット (8khz オーディオを録音) であるため、毎回 1 秒のオーディオをコールバックに戻す必要があります。Audio Queue のバッファ サイズが正しいことを確認しました (動作によってある程度確認されています)。私は何を間違っていますか?別の RunLoop を使用して AudioQueueNewInput で何かを行う必要がありますか? 試してみましたが、これは違いを生むようには見えませんでした...
ちなみに、デバッガーで実行すると、各コールバックは8000 個のサンプルでいっぱいです。これはスレッド化/タイミングの問題だと思います。