iPodライブラリでMP3から生のPCMサンプルを抽出して、曲を再生したり、ピッチ、テンポを操作したり、フィルタ)。私はすでにAVPlayerとAVAudioPlayerのルートを崩していますが、どちらも再生を制御することはあまりありません。iPodライブラリの生のPCMサンプルを抽出してサウンドエフェクトで再生する
以下のコードは、これまで私が得たものです。私は今、オーディオを再生してそのような効果を適用するためにどのフレームワークを使用するのかわからないので、私のwhileループでCMSampleBufferRefをどうすればいいのか分からない時点です。
これを達成するための最良のアプローチは何でしょうか?私はファイルがAVAssetWriterを使って変換されたケースを見てきましたが、プロセスが時間がかかりすぎるため、これは私のためにカットされません。確かに、最初にディスクに書き込むことなく、PCMサンプルをメモリに読み込んで再生することはできますか?
NB:私は以下のコードは、プロジェクト内でmp3を参照している知っているが、私は私が何かをやっているMPMediaPropertyAssetURL
-(IBAction)loadTrack:(id)sender {
NSString *songPath = [[NSBundle mainBundle] pathForResource:@"Smooth_Sub Focus_192" ofType:@"mp3"];
NSURL *assetURL = [[NSURL alloc] initFileURLWithPath:songPath];
AVURLAsset *songAsset = [AVURLAsset URLAssetWithURL:assetURL options:nil];
NSError *assetError = nil;
AVAssetReader *assetReader = [[AVAssetReader assetReaderWithAsset:songAsset
error:&assetError] retain];
if (assetError) {
NSLog (@"Error: %@", assetError);
return;
}
AVAssetReaderOutput *assetReaderOutput = [[AVAssetReaderAudioMixOutput assetReaderAudioMixOutputWithAudioTracks:songAsset.tracks
audioSettings: nil] retain];
if (![assetReader canAddOutput:assetReaderOutput]) {
NSLog (@"Incompatible Asser Reader Output");
return;
}
[assetReader addOutput: assetReaderOutput];
[assetReader startReading];
CMSampleBufferRef nextBuffer;
while (nextBuffer = [assetReaderOutput copyNextSampleBuffer]) {
/* What Do I Do Here? */
}
[assetReader release];
[assetReaderOutput release];
}
素晴らしいです。これは私の半分の方法をそこに得ます。私はオーディオフレームワークに関するいくつかの研究を行ってきました。私の要件に合った唯一のフレームワークはOpenALです。急な学習曲線でこれは少しオフラインですが、私はFinchのようなものでNSDataを使用できますか? – Dino
私はFinchを自分で使ったことがないので、NSDataを直接受け入れるかどうかはわかりません。 –
FYI:試してみましたが、EXC_BAD_ACCESSを取得しました。「for」を実行する前に、 'CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer'によって返されたOSStatusをチェックすることで、それを取り除くことができました。 – Larme