音声を使って楽しげなものを作りたい。再生をする。

今回は

音声を使って楽しげなものを作りたい。録音をする。

で録音した音を再生したいと思います。

 

バッファーを利用してロードした音のデータを再生します。

今回の方法に関しても、音のデータをいじる為にバッファを利用していますが、

単純に録音及び再生にはMediaRecorder,MediaPlayerを利用するのが楽だと思います。

※MediaPlayerに関しては、また今度紹介します。

 

保存されたデータに関しては、取得方法もいろいろあると思いますが、

File file = new File(Environment.getExternalStorageDirectory().getAbsolutePath()+"/sound.pcm");

のパスのデータが存在する状態ではじめたいと思います。(実際に利用する場合には、exist()などを利用して、存在を確かめる方が確実です。)

この値を取得する時のStreamを作成します。

InputStream is = new FileInputStream(file);

この値をバッファー単位で取得できるようにします。

BufferedInputStream bis = new BufferedInputStream(is);

このバッファーからバイト配列をデータに変換する必要があるので、

DatainputStream dis = new DataInputStream(bis);

とする事で、ファイル取得の方法ができました。

また、中に含まれているデータに関しては16bitのデータである
(8bitだとエラーが発生したので。。)

ファイルの長さの半分の長さだけのデータが含まれているかと思いますので、

int musicLength = (int)(file.length()/2);
short[] music = new short[musicLength];

です。

 

ファイルの中のデータをmusicの中に移します。

int i = 0;
while(dis.available() > 0){
 music[i] = dis.readShort();
 i++;
}

※申し訳ありません。音を逆再生設定してしまっておりましたので、修正します。

取り出し終えた段階で、ファイルの方はcloseをします。

dis.close();

また、上で取得したデータを再生する為に、AudioTrackクラスを作成します。

AudioTrack audioTrack = new AudioTrack(
 AudioManager.STREAM_MUSIC,
 44100,
 AudioFormat.CHANNEL_CONFIGURATION_MONO,
 AudioFormat.ENCODING_PCM_16BIT,
 musicLength,
 AudioTrack.MODE_STREAM);

上記のようにバッファーサイズに関しては、音楽の長さ分いれているのですが、
要するに、音楽を流す準備ができたら流し始めるという設定をしています。

先にplayをしておきます。

audioTrack.play();

playの後に中に入れるデータを用意するには少し変な感じですが、STREAMって要はこういう事なのかと。。
このaudioTrackの中にデータをいれるとバッファーを満たした段階で再生されます。

audioTrack.write(music, 0 ,musicLength);

以上でバッファーが溜まり次第、音楽が再生される仕様を作成しました。

 

前後の記事

前の記事:

次の記事:

関連の記事

コメントの投稿

  • サイト内検索

新作アプリの紹介

関連サイトの紹介

アンドロイドアプリ開発TIPS
きぐるみカメラ
ふらいぱん
アンドロイドのデザイン集
Page top↑