問題タブ [extaudiofile]
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 - ExtAudioFileConvertの質問
私は圧縮された(mp3)サウンドを取得し、それをPCMとして保存することについていくらかの進歩を遂げています。さらに、同じプロセス内で、元のファイルを2秒の長さのチャンクに分割したいと思いました。私は成功しているように見えますが、その理由について少し混乱しています。
オーディオのブロックを読み取ってファイルを書き出すときに、ファイルが2秒の制限を超えるようなチャンクを書き込もうとしているかどうかを確認します。もしそうなら、私は2秒に達するのに十分な書き込みを行い、ファイルを閉じてから、新しいファイルを開き、残りを新しいファイルに書き込んでから、さらにデータを読み取ります。このようなもの:
これが私の質問です(私は関連する行にラベルを付けようとしました):
A:バッファにオフセットを見つけて、そこに値を誤ってハードコーディングしないようにするためのより良い方法はありますか?たとえば、フレーム番号からデータオフセットを取得するための祝福された方法はありますか?
B:ExtAudioFileWriteが圧縮から解凍への変換を行っている場合、書き込んでいるデータはまだ解凍されていないので(右?)、フレーム番号とオフセットを処理するときに心配する必要はありません。圧縮データ?代わりに、最初にファイルをPCMファイルまたはメモリに変換してから、そのPCMを分割する必要がありますか?
ありがとう!
-mahboud
ps。
clientFormatは次のように定義されています。
およびdstFormat:
iphone - AudioFileWriteBytes がエラー コード -40 で失敗する
AudioFileWriteBytes() を使用して生のオーディオ バイトをファイルに書き込もうとしています。これが私がやっていることです:
次に、ファイルに直接書き込まれる保持バッファ (SInt16) にオーディオ データ (float として保存) をコピーします。リング バッファからコピーしているため、コピーがファンキーに見えます。
さて、実際に SInt16 バッファ「holdingBuffer」からオーディオ ファイルにオーディオを書き込もうとします。NSLog はエラー -40 を吐き出しますが、バイトを書き込んでいるとも主張します。ファイルにデータは書き込まれません。
このエラー -40 は何ですか? ちなみに、リングバッファからファイルに直接書き込むと、すべて正常に動作します。もちろん、私は SInt16 ではなくフロートを書いているので、ジャンクのように聞こえますが、AudioFileWriteBytes は文句を言いません。
iphone - ExtAudioFileWriteAsyncからのEXC_BAD_ACCESS
音声を録音するためにオーディオユニットを使用しています。コールバック関数で、AudioBufferListのデータを取得しています。このバッファをファイルに保存する必要があります。
問題は; バッファを.cafファイルに保存しようとすると、アプリケーションがクラッシュします。以下はコードです。
エラー:
この問題を解決するために誰かを助けてください。
ios - iOSでExtAudioFileRefタイプをAudioFileIDタイプに変換する
ExtAudioFile Servicesを使用していて、AudioFileIDパラメーターを必要とするAudioFileServiceを使用したいと思います。このパラメーターは、ExtAudioFileServicesで使用されるExtAudioFileRefに対応します。ExtAudioFileRefタイプからAudioFileIDタイプに変換するにはどうすればよいですか?
iphone - ios - 新しいプロジェクトで ExtAudioFileConvert サンプルを使用する方法
私が欲しかったのは、複数のファイルを 1 つに結合したりトリミングしたりするなど、おそらくそれを操作できることを期待して、caf ファイルを読み取って別のファイルに書き込むことだけでした。それで、私は Apples 独自のiPhoneExtAudioFileConvertTest Sample を見つけました。これは非常に難しそうに見えますが、自分のプロジェクトにピースを取り込んでから、それで遊ぶことができると考えました。これはかなり面倒であることがわかりました。
さて、眠れぬ夜を数晩かけて情報を探し、多くの試行錯誤を繰り返した後。自分のプロジェクトでiPhoneExtAudioFileConvertTestサンプルを使用することができたと思います。これを投稿して、仲間のコーダーの睡眠を節約しようと思いました。
手順:
- iPublicUtilityフォルダーとExtAudioFileConvert.cppファイルをiPhoneExtAudioFileConvertTestサンプルからプロジェクトに追加しました。
- 3 つの新しい .cpp ファイルの拡張子を .mm に変更しました (.h ファイルは同じままです)。これにより、xcode は cpp ファイルを目的の c++ ファイルとして表示できます。
- ExtAudioFileConvert.mm
- iPublicUtility/CAStreamBasicDescription.mm
- iPublicUtility/CAXException.mm
- メソッドを呼び出す予定のmyViewController.m (UIViewController) クラスで
DoConvertFile(sourceURL, destinationURL, outputFormat, sampleRate);
、DoConvertFile メソッドを表示するために 1 行追加しました。extern OSStatus DoConvertFile(CFURLRef sourceURL, CFURLRef destinationURL, OSType outputFormat, Float64 outputSampleRate);
- また、convertFile メソッドの呼び出しに .cpp ファイルを使用しているため、myViewController.mの名前を myViewController.mm に変更しました。
- ターゲット/ビルド設定の下のプロジェクト設定で、キー「ヘッダー検索パス」を検索し、その値に次を追加しました/Developer/Extras/CoreAudio/PublicUtility/ $(inherited)この行がないと、コンパイラは 30 以上を提供します「DebugPrintfFile 」などのエラーは、このスコープで宣言されていませんでした*
- サンプルにはアプリのデリゲートにもコードがあることに気付きました
- そのため、2 つのメソッドのコードをサンプルの appDelegate から自分の appDelegate に直接コピーしました。
static void interruptionListener(void *inClientData, UInt32 inInterruption)
static void propertyListener(void *inClientData, AudioSessionPropertyID inID, UInt32 inDataSize, const void *inData)
#import
元のステートメント の直後に次の4行を追加しました- #import "CAXException.h"
extern void ThreadStateInitalize();
extern void ThreadStateBeginInterruption();
extern void ThreadStateEndInterruption();
- もちろん、サンプルからのコードも
applicationDidFinishLaunching
私のdidFinishLaunchingWithOptions
- そしてもう一度私の appDelegate.m を appDelegate.mm に名前を変更しました
- そのため、2 つのメソッドのコードをサンプルの appDelegate から自分の appDelegate に直接コピーしました。
コンパイルしてもエラーは発生せず、ランタイムは ExtAudioFileConvert.mm のアサートをコメントアウトした場合にのみ機能します
また、起動時にエラーが表示されますが、問題は発生していませんが、削除したいと思います。誰 ?
私のappDelegateでこの呼び出しから来ているようです
これらの警告/エラー以外に、caf ファイルを作成/変換できます :)。フィードバックをいただければ幸いです。
ios - iOSのExtAudioFileWriteがエラーコード-6656で失敗する
ExtAudioFileWriteを使用してオーディオデータをファイルに書き込みます。しかし、アラームによって中断されると、ファイルは保存されますが、このエラーが発生します。これはどのようなエラーですか?
buffer - インターリーブされていないオーディオ データを格納するようにバッファー リストを構成しますか?
オーディオ グラフでリモート I/O ユニットからオーディオをキャプチャしようとしているコールバックがあります。コールバック内には、2 つのチャネルからのインターリーブされていないデータを格納する必要がAudioBufferList
ある関数があります。AudioUnitRender
コンテキストのコード スニペットを次に示します。
誰もこれを行う方法を知っていますか?
ありがとう。
c - AudioFileInitializeWithCallbacksに必要なコールバックを読み取りますか?Apple AudioFile API
AudioFileおよびExtAudioFileAPIを使用して低レベルのオーディオライターを作成しようとしています。AudioFileInitializeWithCallbacksを使用して新しいオーディオファイルを作成していますが、これには読み取りと取得のサイズのコールバックを実装する必要があるようです。なぜこれは単一の書き込みコールバックを受け入れ、データが正常に書き込まれたことを信頼できないのですか。
CDやネットワークソケットなど、シークできないストリームに書き込んでいる場合はどうなりますか?
確かに、これはデータを書き込みコールバックに継続的にプッシュする必要があり、操作が成功しなかった場合にエラーコードを返す必要がある場所にこのデータを書き込むのは私の責任です。
AudioFile_SetSizeProcとAudioFile_WriteProcのドキュメントは、どちらも読み取り操作について説明しているため、正しくないようです。「inPosition読み取り元のデータへのオフセット」、「@resultコールバックはデータのサイズを返す必要があります。」
現時点では、ファイルに書き込むだけでこれを乗り越えましたが、最初の書き込み手順の後にkExtAudioFileError_InvalidOperationOrderを取得します。これは何を意味するのでしょうか?それについてのドキュメントにはコメントはありません。
ポインタやヘルプは大いに活用されます。
ios - オーディオファイルを読み取るときの大量のメモリスパイク
現在、Diracの(OSStatus) readFloatsConsecutive:(SInt64)numFrames intoArray:(float**)audio
関数を使用してファイルからオーディオフロートを読み取っています。floatのポインタを作成します**
そしてそれをディラック関数に渡すと、すべてのフロートがマロックされたときに大量のメモリスパイクが発生します。
楽器では、約90MB増加するスパイクが発生しますが、何らかの理由で、このアプリは引き続きデバイス上で実行されます。
たとえば、15839544 * 2つのフロートがこれらの大規模なスパイクを引き起こしますか?
どうしてそんなに多くのメモリを使うことができるのでしょうか?仮想メモリですか?VMの割り当てが表示されません。
たとえば5MBのオーディオファイルの単一のファイルをロードすると、メモリにこのような大規模なスパイクが発生する可能性があるかどうかはわかりません。
iphone - ExtAudioFileWrite for iOS を使用してオーディオ サンプルのバッファーを aac ファイルに書き込む
更新:私はこれを理解し、自分の質問への回答として自分の解決策を投稿しました(以下)
AAC 形式の ExtAudioFileWrite を使用して、オーディオ サンプルの単純なバッファをファイルに書き込もうとしています。
以下のコードでモノバッファを.wavファイルに書き込むことでこれを達成しましたが、ステレオまたはAACファイルに対してこれを行うことはできません。
これが私がこれまでに持っているものです...
私の具体的な質問は次のとおりです。
- AAC の AudioStreamBasicDescription を設定するにはどうすればよいですか?
- ここでステレオが正しく機能しないのはなぜですか? チャネル数 ('mChannels') を 2 に設定すると、左チャネルが正しく取得され、右チャネルに歪みが生じます。
私はどんな助けにも非常に感謝しています - 私はこれで見つけることができるほぼすべてのページを読んだと思いますが、同様の質問がありますが、通常、入力オーディオファイルから AudioStreamBasicDescription パラメータを導出するため、賢明ではありません。の結果を見ることができません。Apple のドキュメントも役に立ちません。
よろしくお願いします。
アダム