2009-11-19 33 views
5

録音ファイルの音声レベル(dB)を表す視覚的なグラフを作成する必要があります。私はこのようにしてみました:AVAudioPlayer - 測定 - 波形(グラフ)を作成したい

NSError *error = nil; 
AVAudioPlayer *meterPlayer = [[AVAudioPlayer alloc]initWithContentsOfURL:[NSURL fileURLWithPath:self.recording.fileName] error:&error]; 

if (error) { 
    _lcl_logger(lcl_cEditRecording, lcl_vError, @"Cannot initialize AVAudioPlayer with file %@ due to: %@ (%@)", self.recording.fileName, error, error.userInfo); 
} else { 
    [meterPlayer prepareToPlay]; 
    meterPlayer.meteringEnabled = YES; 

    for (NSTimeInterval i = 0; i <= meterPlayer.duration; ++i) { 
     meterPlayer.currentTime = i; 
     [meterPlayer updateMeters]; 
     float averagePower = [meterPlayer averagePowerForChannel:0]; 
     _lcl_logger(lcl_cEditRecording, lcl_vTrace, @"Second: %f, Level: %f dB", i, averagePower); 
    } 
} 
[meterPlayer release]; 

しかし、それはうまくいきませんでした。私は常に-160 dBを得ます。それを実装する方法に関する他のアイデア?

UPD:ここでは私が最終的に得たものである:

alt text http://img22.imageshack.us/img22/5778/waveform.png

+0

ここをクリックしてください[https://github.com/prodia/AudioVisualizer](https://github.com/prodia/AudioVisualizer) –

答えて

0

[OK]をみんな、私は再び自分の質問に答えるつもりらしい:concreticsのhttp://www.supermegaultragroovy.com/blog/2009/10/06/drawing-waveforms/ない多く、しかし少なくとも、あなたは、Appleのドキュメントを読むことを知っているだろう。

+1

私はこれが一歳未満であることは知っていますが、元の投稿ではオープンソースのコンポーネントを投稿するつもりと言いました。私はあなたのブログ記事を読んだが、ダウンロード可能なものは何も見ていなかった。私は何かを見逃してしまったのか、あなたの心を変えましたか? –

+0

私は心を変えませんでしたが、決してそれをする機会はありませんでした。あなたのニーズに合わせて私に電子メールを書いてください。おそらく私はあなたを助けることができます。 –

3

私はそれを自分自身を使用していないが、AppleのavTouch iPhone用サンプルはAVAudioPlayerを搭載し棒グラフを持っており、あなたが簡単に確認することができます彼らがどのようにそれを参照してください。

+0

私はこのサンプルを知っていますが、主な違いは、オーディオファイルが再生されていることです。私はそれを再生する必要はありません。私はファイルの任意の部分を実際に再生せずに任意の時点で調べる必要があります。そしてその特性を視覚化するグラフを構築する。 –

+0

ああ...あなたは自分でデータを読んで、選択した期間のレベルを見つけなければなりません。また、ファイルは解凍されていないので、解読するか、他のフレームワークを使用してPCMデータにアクセスする必要があります。私はExtAudio、Audio Queue、Remote IO AudioUnitがあなたの調査対象となることを理解しています。私はまだ自分自身を学んでいる。 – mahboudz

+0

>>ファイルが解凍されていないので、解読する必要があります - >解答がわからない場合は返信しないでください。圧縮データまたは生データの読み込みには違いはありません。 SDKはこれをすべて処理しています。あなたは後であなたを読んでくれる人を誤解させているだけです。 –

0

あなたの制約に基づいてAVAudioPlayerを使用することはできません。たとえサウンドファイルを実際に再生せずに「開始」することができたとしても、オーディオファイルがストリーミングするのと同じくらい速くグラフを作成するのに役立ちます。あなたが話しているのは、音の静的な分析です。これははるかに異なるアプローチを必要とします。ファイルを自分で読み込み、手動で解析する必要があります。私はSDKの中に何かを使っている簡単な解決策はないと思います。

6

私はこの同じ質問に遭遇し、検索に多くの時間を費やした他の人を助けたいと思います。あなたの時間を節約するために、私は自分の答えを出します。私はextaudioserviceオーディオキューavfoundationに関する記事を中心に検索した後...秘密の一種として

これを扱うここに誰かを嫌います。私はAVFoundationを使用する必要があることに気づい

、理由はそれは、最新のバンドルシンプルさで、それは客観的Cが、そうではないのcppスタイルです。

だから、それを行うための手順は複雑ではありません。

  1. avassettrack
  2. から avassetreadertrackoutputを作成 avasset
  3. からavassettrackを作成avasset
  4. からavassetreaderを作成AVAsset
  5. オーディオファイルからの作成
  6. avassetreadertrackoutputを前に追加してくださいS avassetreaderすることができます avassettrackoutput copyNextSampleBufferから音声データ

一つ一つを(すべてのデータを読み出すためのループである)の読み出しを開始します。

copyNextSampleBufferはあなたにCMSampleBufferGetAudioBufferListWithRetainedBlockBufferによってAudioBufferListを取得するために使用することができますCMSampleBufferRefを与えます。 AudioBufferListは、AudioBufferの配列です。 AudioBufferは、mData部分に格納されているオーディオデータの束です。

上記はextAudioServiceでも実装できます。しかし、私は上記のavfoundationの方が簡単だと思います。

次の質問は、とどうすればよいですか?mDataavassetreadertrackout出力が得られたら、その出力形式を指定できるので、出力をlpcmと指定します。

最終的に得られるmDataは実際には浮動小数点形式の振幅値です。

簡単右ですか?私はここでそこから作品を整理するのに多くの時間を費やしましたが。

共有のための二つの有益なリソース: 基本的な用語や概念を知るためにこの記事を読む:https://www.mikeash.com/pyblog/friday-qa-2012-10-12-obtaining-and-interpreting-audio-data.html

サンプルコード:https://github.com/iluvcapra/JHWaveform あなたは上記直接このサンプルからコードを言及したのほとんどをコピーして、自分自身の目的のために使用することができます。

関連する問題