1

Shazam のような Android アプリを開発しようとしています。Google で Shazam の仕組みを検索したところ、これを読むことがわかりました。ご覧のとおり、最初に曲を録音します。しかし、Android Studio がそのコードの赤い下線でエラーを表示しているため、その記録コードに問題があります。

これが私のコードです:

private AudioFormat getFormat() {
    float sampleRate = 44100;
    int sampleSizeInBits = 16;
    int channels = 1;          //mono
    boolean signed = true;     //Indicates whether the data is signed or unsigned
    boolean bigEndian = true;  //Indicates whether the audio data is stored in big-endian or little-endian order
    return new AudioFormat(sampleRate, sampleSizeInBits, channels, signed, bigEndian);
}

Is は、オーディオ録音のフォーマットに使用されます。そのコードをメイン アクティビティにコピーすると、次のようなエラーが表示されます。

ここに画像の説明を入力

エラーでカーソルを合わせると、「AudioFormat は android.media.AudioFormat で公開されていません。外部パッケージからアクセスできません」と表示されます。どうすれば修正できますか?私がフォローしているリンクのコードは間違っていますか? Shazamアプリのようなものを開発するために、Android用のチュートリアルコードを探しています。

Andrew Cheongの回答用に編集

Cheongの答えのおかげで理由がわかったので、このように使用します

private AudioFormat getFormat() {
        float sampleRate = 44100;
        int sampleSizeInBits = 16;
        int channels = 1;          //mono
        boolean signed = true;     //Indicates whether the data is signed or unsigned
        boolean bigEndian = true;  //Indicates whether the audio data is stored in big-endian or little-endian order

        return new AudioFormat.Builder().setSampleRate(Math.round(sampleRate)).build();
    }

しかし、コードでわかるように、サンプル レートを設定するための setSampleRate() しか見つかりません。sampleSizeInBits、channels、signed、bigEndian を設定する他の方法が見つかりません。それらを設定する方法がわかりません。残りの変数を設定するにはどうすればよいですか?

4

1 に答える 1

2

AudioFormat のドキュメントを見ると、「ビルダー クラス」があることに気付くかもしれません。

class   AudioFormat.Builder
        Builder class for AudioFormat objects. 

AudioFormat オブジェクトのビルダー クラス。このクラスを使用して、AudioFormat インスタンスを構成および作成します。オーディオ エンコーディング、チャネル マスク、サンプル レートなどのフォーマット特性を設定することにより、このオーディオ フォーマットが使用されている場合に、このデバイスのデフォルトの動作から変更するものを指定します。AudioFormat インスタンスの構成に使用できるさまざまなパラメーターの完全な説明については、AudioFormat を参照してください。

これがbuild()方法です。

これはアプリケーション設計における一種の「パターン」であり、設計パターンの学生でないと少し抽象的で理解しにくいですが、とにかく関連する記事を次に示します。

于 2016-09-22T04:26:54.963 に答える