我想知道是否有一种直接的方式来显示我的音乐播放器正在播放的当前正在播放的MP3文件的图像和标题.我的代码如下,对于这个例子非常简单.我只想使用我在项目中包含的一个.MP3进行测试.
class ViewController: UIViewController {
let audioPath:NSURL! = NSBundle.mainBundle().URLForResource("SippinOnFire", withExtension: "mp3")
@IBOutlet var sliderValue: UISlider!
var player:AVAudioPlayer = AVAudioPlayer()
@IBAction func play(sender: AnyObject) {
player.play()
//println("Playing \(audioPath)")
}
@IBAction func pause(sender: AnyObject) {
player.pause()
}
@IBAction func stop(sender: AnyObject) {
player.stop()
player.currentTime = 0;
}
@IBAction func sliderChanged(sender: AnyObject) {
player.volume = sliderValue.value
}
override func viewDidLoad() {
super.viewDidLoad()
var error:NSError? = nil
player = AVAudioPlayer(contentsOfURL: audioPath!, error: &error)
player.volume = 0.5;
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose …Run Code Online (Sandbox Code Playgroud) 我正在关注以下帖子以创建简单的音乐播放器,但是从列表中选择任何歌曲或从 MediaController 按下上一个/下一个会出现以下错误。我正在使用奥利奥(Andoid 8.1.0 API 27)。
public void playSong()
{
Song playSong = songs.get(songPosn);
songTitle=playSong.getTitle();
long currSong = playSong.getID();
Uri trackUri = ContentUris.withAppendedId(android.provider.MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,currSong);
try
{
player.setDataSource(getApplicationContext(), trackUri);
player.prepareAsync();
}
catch(Exception e){
Log.e("MUSIC SERVICE", "Error setting data source", e);
}
Run Code Online (Sandbox Code Playgroud)
}
错误 MediaPlayer error: attachnewplayer called in state 64
参考:创建简单的音乐播放器
所以我开发了一个 Android 应用程序,它使用 exoplayer 库来流式传输音乐 url。但是,在创建后台服务以在后台启用音乐流后,它不起作用,但当我尝试在前台(MainActivity)时,相同的代码可以工作。
安卓清单
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
package="com.sparrowpaul.musicservice">
<uses-permission android:name="android.permission.INTERNET"/>
<application
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"
tools:ignore="GoogleAppIndexingWarning">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<service android:name=".BackgroundService"/>
</application>
</manifest>
Run Code Online (Sandbox Code Playgroud)
MainActivity.Java
package com.sparrowpaul.musicservice;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Intent intent = new Intent(MainActivity.this, BackgroundService.class);
startService(intent);
}
}
Run Code Online (Sandbox Code Playgroud)
后台服务.java
public class BackgroundService extends Service implements ExoPlayer.EventListener { …Run Code Online (Sandbox Code Playgroud) 有人会推荐一个命令行实用程序,它可以播放以毫秒为单位指定的音频文件的任何部分,例如
player -start-time=0.1234 end-time=5.6789 audio.wav
Run Code Online (Sandbox Code Playgroud)
我遇到过的音频播放器似乎都没有这个功能.vlc支持开始和结束时间,但仅限秒,而Audacity似乎没有太多的命令行选项.
我希望使用Inno Setup为我的应用程序创建安装脚本,但我希望它在安装过程中播放声音文件,这可能吗?如果是这样,你能指出我正确的方向!
我正在使用以下代码在Media Player的帮助下播放一首歌,
mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource( "sound_file_filepath" );
mediaPlayer.prepareAsync();
mediaPlayer.setOnPreparedListener(new OnPreparedListener()
{
@Override
public void onPrepared(MediaPlayer mp)
{
mediaPlayer.start();
}
});
Run Code Online (Sandbox Code Playgroud)
现在我在我的.xml文件中有一个切换图像,它首先显示一个播放图像.点击/触摸播放图像后,它将启动歌曲并用停止图像替换图像.
现在我的问题是我怎么知道我的声音已经播放完毕?我非常清楚isPlaying()方法,如果歌曲正在运行则返回true,否则返回false.但是我应该在何时何地检查此条件以再次显示播放图像?
我试图将一个本地文件添加到mpd(通过mpc)并播放它.我的平台是OpenWRT嵌入式linux.
所以,从手册页中可以看出:
mpc add <file> Add a song to the current playlist
Run Code Online (Sandbox Code Playgroud)
如果我做:
root@OpenWrt:~/.mpd# mpc add /usr/share/baresip/ring.wav
error adding /usr/share/baresip/ring.wav: directory or file not found
Run Code Online (Sandbox Code Playgroud)
或者如果我这样做:
root@OpenWrt:~/.mpd# mpc add file:///usr/share/baresip/ring.wav
error adding file:///usr/share/baresip/ring.wav: Access denied
Run Code Online (Sandbox Code Playgroud)
这里的语法究竟是什么?对于mpc/mpd,手册页真的不太清楚.
我正在尝试使用mci函数编写mp3播放器。(win 7 64bit,vs2010,c ++)
当我尝试播放带有“等待”标志的mp3文件时,我可以听到该文件,但其他所有内容都会卡住,直到文件结束播放为止,如果我删除了“等待”标志,我可以继续工作但听不到任何声音。
这是代码示例:
unsigned long __stdcall PlayThread(void *myParam)
{
char* nameOfMp3 = (char*)myParam;
char* cmd = new char[MAX_PATH];
sprintf(cmd,"open \"%s\" type MPEGvideo alias myFile",nameOfMp3);
mciSendString(cmd,NULL,0,0);
mciSendString("play myFile wait",NULL,0,0);//here is the "wait" flag
mciSendString("close myFile",NULL,0,0);
return 0;
}
Run Code Online (Sandbox Code Playgroud)
我删除了对mci推荐返回值的检查,但是我已经对其进行了仔细检查,在两种情况下都可以。
难道我做错了什么?
我正在开发我的第一个Android应用程序.这是录音应用程序.我正在使用MediaRecord录制语音,如下所示:
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setOutputFile(mFileName);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AMR_NB);
try {
mRecorder.prepare();
} catch (IOException e) {
Log.e(LOG_TAG, "prepare() failed");
}
mRecorder.start();
Run Code Online (Sandbox Code Playgroud)
我有另一个活动来播放这些录制的声音(.3gpp文件).在此活动中,有一个ListView包含我录制的声音.我想用手机上安装的任何音乐播放器播放声音.这是我的代码:(此代码的来源:https://stackoverflow.com/a/3367231/556169)
Intent intent = new Intent();
intent.setAction(android.content.Intent.ACTION_VIEW);
File file = new File((String) ((TextView) item).getText());
intent.setDataAndType(Uri.fromFile(file), "audio/*");
startActivity(intent);
Run Code Online (Sandbox Code Playgroud)
但我得到"音乐播放器无法播放此媒体类型"的错误.
当我浏览这个音频文件并通过我的文件浏览器播放它时,它的工作完美(这意味着,我正在录制声音,成功).但是当我在我的应用程序中使用Intent时,我收到了错误.
另外
我不能使用,MediaStore.INTENT_ACTION_MUSIC_PLAYER因为它已被弃用.我无法使用,Intent.CATEGORY_APP_MUSIC因为它需要min API lvl 15.我的项目的最低API级别应为8.
像平常一样:
player=audioplayer(snd1,FS1);
play(player);
%let as suppose that sound duration is 10 seconds
% and I wanted to play the sound from second 5 or 7...
% .. depending on the input of user(and using audioplayer libraries)
Run Code Online (Sandbox Code Playgroud)