java 3gpp转mp3_Android音频以及音频播放器开发实例
Android 系統支持三種不同來源的音頻播放:
1)本地資源
存儲在應用程序中的資源,例如存儲在 RAW 文件夾下的媒體文件,只能被當前應用程序訪問。
2)外部資源
存儲在文件系統中的標準媒體文件,例如存儲在 SD 卡中的文件,可以被所有應用程序訪問。
3)網絡資源
通過網絡地址取得的數據流(URL),例如“http://www.musiconline.com/classic/007. mp3”,可以被所有應用程序訪問。
Android N 支持的音頻格式
Android N 支持的音頻格式如表 1 所示。
格式/編碼
支持的文件類型
AACLC/LTP
3GPP(.3gp)
MPEG-4(.mp4,.m4a)
ADTS raw AAC
MPEG-TS(.ts,not seekable,Android3.0+)
HE-AACv1(AAC+)
HE-AACv2(enhanced AAC+)
AMB-NB
3GPP(.3gp)
AMR-WB
3GPP(.3gp)
FLAC
FLAC(.flac)only
MP3
MP3(.mp3)
MIDI
Type 0 and 1(.mid,.xmf,.mxmf)
RTTTL/RTX(.rtttl,rtx)
OTA(.ota)
iMelody(.imy)
Vorbis
Ogg(.ogg)
Matroska
PCM/WAVE
WAVE(.wav)
音頻播放器
實例 MediaPlayerAudioDemo 演示了分別播放三種類型的資源的方法。
該實例中 MediaPlayerAudioActivity 向 Intent 對象中傳入要載入的資源類型,并通過該 Intent 啟動用于播放音樂的 Activity:PlayAudio。PlayAudio 根據傳入的參數分別獲取對應的音樂資源并且播放。
實例 MediaPlayerAudioDemo 的運行效果如圖 1 所示。
圖 1??MediaPlayerAudioDemo的運行效果
實例 MediaPlayerAudioDemo 中的 main.xml 代碼如下:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:id="@+id/button01"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="播放存儲在文件系統的音樂" />
android:id="@+id/button02"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="播放網絡中的音樂" />
android:id="@+id/button03"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="播放本地資源的音樂" />
實例 MediaPlayerAudioDemo 中MainActivity.java 文件的代碼如下:
package introduction.android.batterydemo;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.content.IntentFilter;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.CompoundButton;
import android.widget.TextView;
import android.widget.ToggleButton;
import org.w3c.dom.Text;
public class MainActivity extends AppCompatActivity implements View.OnClickListener {
private Button button01, button02, button03;
private String PLAY = "play";
private int Local = 1;
private int Stream = 2;
private int Resources = 3;
@Override
public void onCreate(Bundle saveInstanceState) {
super.onCreate(saveInstanceState);
setContentView(R.layout.activity_main);
button01 = (Button) findViewById(R.id.button01);
button02 = (Button) findViewById(R.id.button02);
button03 = (Button) findViewById(R.id.button03);
button01.setOnClickListener(this);
button02.setOnClickListener(this);
button03.setOnClickListener(this);
}
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this, PlayAudio.class);
if (v == button01) {
intent.putExtra(PLAY, Local);
}
if (v == button02) {
intent.putExtra(PLAY, Stream);
}
if (v == button03) {
intent.putExtra(PLAY, Resources);
}
MainActivity.this.startActivity(intent);
}
}
實例 MediaPlayerAudioDemo 中 PlayAudio 類實現播放音頻的功能,根據 MediaPlayer-AudioActivity 類通過 Intent 傳遞過來的不同的值,而實現三種不同的播放音頻的方式。
PlayAudio.java 文件的代碼如下:
package introduction.android.batterydemo;
import android.app.Activity;
import android.media.MediaPlayer;
import android.os.Bundle;
import android.widget.TextView;
import android.widget.Toast;
public class PlayAudio extends Activity {
private TextView textview;
private String PLAY = "paly";
private MediaPlayer mediaplayer;
private String path;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textview = (TextView) findViewById(R.id.textview);
Bundle extras = getIntent().getExtras();
playAudio(extras.getInt(PLAY));
}
private void playAudio(int play) {
// TODO Auto-generated method stub
try {
switch (play) {
case 1:
path = "sdcard/music/white.mp3";
if (path == "") {
Toast.makeText(PlayAudio.this, "在SD未找到音頻文件",
Toast.LENGTH_LONG);
}
mediaplayer = new MediaPlayer();
mediaplayer.setDataSource(path);
mediaplayer.prepare();
mediaplayer.start();
textview.setText("正在播放文件中的音樂");
break;
case 2:
path = "http://www.musiconline.com/classic/007.mp3";
if (path == "") {
Toast.makeText(PlayAudio.this, "未找到您要播放的音樂",
Toast.LENGTH_LONG).show();
}
mediaplayer = new MediaPlayer();
mediaplayer.setDataSource(path);
mediaplayer.prepare();
mediaplayer.start();
textview.setText("正在播放網絡中的音樂");
break;
case 3:
mediaplayer = MediaPlayer.create(this, null);
mediaplayer.start();
textview.setText("正在播放本地資源中的音樂");
break;
}
} catch (Exception e) {
System.out.println("出現異常");
}
}
@Override
protected void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (mediaplayer != null) {
mediaplayer.release();
mediaplayer = null;
}
}
}
其中,path 指向要播放的音頻文件的位置。
本實例中,外部文件系統中的資源是放置在 SD 卡中的 music 目錄下的 white.mp3;網絡資源使用的是 http://www.musiconline.com/classic/007.mp3;本地資源使用的是 raw 目錄下的 black.mp3 文件。
實例 MediaPlayerAudioDemo 中 AndroidManifest.xml 文件的代碼如下:
package="introduction.android.batterydemo"
android:versionCode="1"
android:versionName="1.0">
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:roundIcon="@mipmap/ic_launcher_round"
android:supportsRtl="true"
android:theme="@style/AppTheme">
在該實例中,每次播放音頻文件時都會從 MediaPlayerAudioActivity 跳轉到一個新的 Activity,即 PlayAudio。
當返回 MediaPlayerAudioActivity 時,由于 PlayAudio 對象被釋放掉,因此播放的音樂也隨之停止,不再播放。若想在返回 MediaPlayerAudioActivity 時音樂不停止,則需要使用 Service 在后臺播放音頻文件。
后臺播放音頻
實例 AudioServiceDemo 演示了如何在后臺播放音頻。該實例的運行效果如圖 2 所示。當用戶單擊“啟動 Service”按鈕時,當前 Activity 結束,應用程序界面消失,返回 Android 應用程序列表,同時后臺啟動 Service,播放視頻文件。
圖 2??AudioServiceDemo的運行效果
該實例界面簡單,僅一個按鈕。布局文件 main.xml 的代碼如下:
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:id="@+id/button1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="啟動Service" />
實例 AudioServiceDemo 中 Activity 文件 AudioServiceDemoActivity.java 的代碼如下:
package introduction.android.audioservicedemo;
import android.content.Intent;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
public class MainActivity extends AppCompatActivity {
private Button btn;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btn = (Button) findViewById(R.id.button1);
btn.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
startService(new Intent("introduction.android.AudioServiceDemo.MY_AUDIO_SERVICE"));
finish();
}
});
}
}
AudioServiceDemoActivity 在按鈕被單擊后使用 startService() 方法啟動了自定義的服務 MY_AUDIO_SERVICE,然后調用 finish() 方法關閉當前 Activity。該服務需要在 AndroidManifest. xml 文件中進行聲明。
AndroidManifest.xml 的代碼如下:
package="introduction.android.AudioServiceDemo"
android:versionCode="1"
android:versionName="1.0">
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
android:name=".AudioServiceDemoActivity"
android:label="@string/app_name">
其中:
定義了名為 MyAudioService 的 Service,該 Service 對名為“introduction.android.AudioServiceDemo. MY_AUDIO_SERVICE”的動作進行處理。
實例 AudioServiceDemo 中 MyAudioService.java 的代碼如下:
package introduction.android.audioservicedemo;
import android.app.Service;
import android.content.Intent;
import android.media.MediaPlayer;
import android.os.IBinder;
import java.io.IOException;
public class MyAudioService extends Service {
private MediaPlayer mediaplayer;
@Override
public IBinder onBind(Intent argO) {
// TODO Auto-generated method stub
return null;
}
@Override
public void onDestroy() {
// TODO Auto-generated method stub
super.onDestroy();
if (mediaplayer != null) {
mediaplayer.release();
mediaplayer = null;
}
}
@Override
public void onStartCommand(Intent intent, int flags, int startId) {
// TODO Auto-generated method stub
super.onStartCommand(intent, flags, startId);
String path = "sdcard/music/white.mp3";
mediaplayer = new MediaPlayer();
try {
mediaplayer.setDataSource(path);
mediaplayer.prepare();
mediaplayer.start();
} catch (IOException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
該服務啟動 Mediaplayer,并播放存放于 SD 卡中的“sdcard/music/white.mp3”文件。
總結
以上是生活随笔為你收集整理的java 3gpp转mp3_Android音频以及音频播放器开发实例的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 天空是蓝蓝的是哪首歌啊?
- 下一篇: 好听的qq名字两个字