求android播放声音的代码!!!

肖恩 2012-06-26 04:03:57
如题,
在用户点击按钮的时候,发出 '滴' 的声音,这个怎么实现呢??
...全文
390 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
phper2008 2012-06-26
  • 打赏
  • 举报
回复
完整实现
布局:main.xml
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="fill_parent"
android:minHeight="40dip" android:gravity="center_vertical"
android:descendantFocusability= "blocksDescendants">

<Button android:textSize="17sp" android:textStyle="bold"
android:textColor="#ff000000" android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="点击按钮" android:id="@+id/btnCktp"
android:layout_alignParentRight="true"
android:focusable="false" android:clickable="true"/>

<TextView android:id="@+id/tvMsg" android:layout_width="fill_parent"
android:layout_height="40dip" android:textSize="16dip"
android:gravity="center_vertical|left" android:textColor="#ff000000"
android:layout_alignParentLeft="true" android:layout_toLeftOf="@id/btnCktp">
</TextView>

</RelativeLayout>


beepSound.java
package bee.android.control.csdn;

import android.app.Activity;
import android.media.AudioFormat;
import android.media.AudioManager;
import android.media.AudioTrack;
import android.os.Bundle;
import android.os.Handler;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import bee.android.control.R;

public class beepSound extends Activity implements OnClickListener {

private final int duration = 3; // seconds
private final int sampleRate = 8000;
private final int numSamples = duration * sampleRate;
private final double sample[] = new double[numSamples];
private final double freqOfTone = 100; // hz

private final byte generatedSnd[] = new byte[2 * numSamples];

Handler handler = new Handler();

TextView tvMsg;
Button btnCktp;

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.listview_item_button);

tvMsg = (TextView) this.findViewById(R.id.tvMsg);
btnCktp = (Button) this.findViewById(R.id.btnCktp);
btnCktp.setTag("点击按钮发音");
btnCktp.setText("点击发音");
btnCktp.setOnClickListener(this);
}

@Override
protected void onResume() {
super.onResume();

}

void genTone() {
// fill out the array
for (int i = 0; i < numSamples; ++i) {
sample[i] = Math.sin(2 * Math.PI * i / (sampleRate / freqOfTone));
}

// convert to 16 bit pcm sound array
// assumes the sample buffer is normalised.
int idx = 0;
for (double dVal : sample) {
short val = (short) (dVal * 32767);
generatedSnd[idx++] = (byte) (val & 0x00ff);
generatedSnd[idx++] = (byte) ((val & 0xff00) >>> 8);
}
}

void playSound() {
AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC, 8000,
AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, numSamples,
AudioTrack.MODE_STATIC);
audioTrack.write(generatedSnd, 0, numSamples);
audioTrack.play();
}

@Override
public void onClick(View v) {
// TODO Auto-generated method stub
switch (v.getId()) {
case R.id.btnCktp:
// Use a new tread as this can take a while
Thread thread = new Thread(new Runnable() {
public void run() {
genTone();
handler.post(new Runnable() {

public void run() {
playSound();
}
});
}
});
thread.start();

break;
}
}

}

80,351

社区成员

发帖
与我相关
我的任务
社区描述
移动平台 Android
androidandroid-studioandroidx 技术论坛(原bbs)
社区管理员
  • Android
  • yechaoa
  • 失落夏天
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧