2017-03-20 7 views
0

最初に私の悪い英語を残念に思います。私は自分のベストを尽くす。2トーンのオーディオ信号を生成する

AudioTrack tone = generateTone(500, 1000); 
tone.play(); 

しかし、私は2つの周波数を次々に淡いする必要があります。

private AudioTrack generateTone(double freqHz, int durationMs) 
{ 
    int count = (int)(44100.0 * 2.0 * (durationMs/1000.0)) & ~1; 
    short[] samples = new short[count]; 
    for(int i = 0; i < count; i += 2){ 
     short sample = (short)(Math.sin(2 * Math.PI * i/(44100.0/freqHz)) * 0x7FFF); 
     samples[i + 0] = sample; 
     samples[i + 1] = sample; 
    } 
    AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, 
      AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT, 
      count * (Short.SIZE/8), AudioTrack.MODE_STATIC); 
    track.write(samples, 0, count); 
    return track; 
} 

以下のように私はによって彼を呼び出すことができます見えます

だから、私は短いコード(オーディオ信号発生器)を持っています30分

ように、その後、その後1秒間400Hzの、1秒間800、1秒間再び400と...

私はそれをどのように行うことができますか? 2つのaudioTracks tone1とtone2を作成します。

AudioTrack tone = generateTone(500, 1000); 
AudioTrack tone2 = generateTone(800,1000); 

次に何をすればよいですか?あなたが私に答える時間を過ごしてくれてありがとう、あなたの答えに感謝します! ああ、P.S =>それはアンドロイドアプリに関する...

答えて

0

再生状態を確認するには、getPlayState()をクリックしてください。

 tone.play(); 
     do{ 
      SystemClock.sleep(10); 
     }while (audioTrack.getPlayState()==AudioTrack.PLAYSTATE_PLAYING); 

     tone2.play();   

ちょうどメインスレッド

+0

おかげでそれをしないことを確認してください。しかし、私は新しいスレッドでそれをやろうとしています。私は静的メソッド以外のメッセージgetPlayState()を静的コンテキストから参照することはできません。 – MDobroch

+0

@MDobrochこのスレッド用に書いたコードを貼り付けることができますか? – pantos27

関連する問題