2011-11-09 11 views
1

ユーザーは、アプリケーションでオーディオを録音し、ファイルの一部を選択して再録音できるようにしたいと考えています。例えば、おそらく彼らは最初に「どのように今、茶色の牛」を記録し、その終わりを選択して「枝豆」を再録音するでしょう。これは最初のファイルにマージされます。それは "どのように今、荒廃した種をまくか"となります。ファイルのオーディオ/レコーディング部分を編集する

これは私が予想していたよりもはるかに難しいようです。 3GP形式のファイルでこれを行うことはできますか?そうでない場合は、どうすればそれらを必要な形式に変換できますか?

"この録音済みのオーディオファイルを取って、この他のメディアファイルの5秒目から10秒目のセクションに入力して、新しい編集済みファイルを保存します"と言うことができます。私はミリ秒、フレーム、サンプル、バイトの間の変換を集めて、これをさらに複雑にする可能性があります。

私はRingdroidアプリ(これはオープンソースだと感謝しています!)を調べていますが、これは少なくとも類似していますが、コメントの方法はほとんど変わっていません...うまくいけば私よりはるかに複雑です必要。

私は、この他のスレッドを見ましたが、それは私が必要なものであっても、私は、これらのクラスは、Androidの一部であると信じていない:Saving part of an audio file (Java)

答えて

4

私は最終的に3GPファイルの一部を編集することができました。

私はRingDroidのCheapAMR(3GPも管理しています)とCheapSoundFileクラスと、新しい "AudioFileHandler"クラスを使用しました。

私は道に沿っていくつかの重要な教訓を学んだ:

  • 3GPファイルが分割され、「ボックス。」各ボックスには、ボックスの長さ、およびいくつかのデータを示す値が含まれています。実際の音楽データを含む「mdat」ボックスと、ムービーデータを含む「moov」ボックス(このボックスはオーディオ専用ファイルでさえも)です。
  • ファイル内のボックスとそのサイズは、AndroidデバイスからAndroidデバイスに変更されます
  • 音楽データ自体は「フレーム」(3GPでの私のテストでは32バイトですが、別の長さになる可能性があります)
  • 16進エディタは、この種のコーディングを行うときに非常に便利なツールです。
  • RingDroidにはいくつかのバグがありますが、それは正確に数を報告するものではありません。フレームなど、ハックする必要がありますこの
  • の場合、オーディオファイルの長さを変更するときには、ftypとmoovのボックスをそのままにして、ファイルの "mdat"の直前の4バイトを変更してください。これは、mdatヘッダー自体の8バイトを含む、mdatボックスの長さをバイト単位で表します。
+0

こんにちはチャド、あなたはiPhoneのためのこの解決策を知っている可能性はありますか? – applefreak

+0

申し訳ありませんAppleDeveloper、私は恐れていません。 RingDroidがAndroidで私を助けてくれました。おそらくiOSで同様のオープンソースプロジェクトを見つけることができます –

+0

"mdat"ボックスをどのように抽出すればよいですか?私は続いた: "http://android.amberfog.com/?p=181"しかし、 "mdat"ヘッダータイプの代わりに "moov"ボックスタイプがある。具体的には、3gpファイルからフレーム(オーディオデータ)を抽出します。もしあなたが知っていれば、3gpファイル指定のリンクを投稿してください。ありがとうございました –

関連する問題