1.怎么将音乐文件作为matlab GUI的背景音乐来播映?
matlab支撑每个采样位为8或16的wav音乐。咱们假定原始文件为某个mp3文件。咱们所要做的便是,下载一个MP3转WAV的软件,最常见的便是千千静听了。千千静听的右键菜单内有一个选项为【转化格局…】,咱们将其转化为采样位为16的WAV文件。
假如音乐文件比较大,主张将采样率更改为小一点的。。。
咱们要做的第一步,便是将该文件的数据转化为matlab能够辨认的矩阵,这用到一个函数:waveread。设该wav文件名为a.wav,则句型为:
[y,Fs,bits] = wavread(‘a.wav’); %将a.wav 放到当时目录
其间:
y——音乐数据;
Fs——采样率;
bits——采样位,默认值为16。
2.怎么播映与中止音乐?
这个进程,或许很多人会想到以下办法:
sound(y,Fs,bits)
其实,这种办法有个问题:一旦播映了,就无法中止。那么,有没有办法能够随意播映和中止音乐呢?
答案是:有。
让声卡发出声响,实践是一个模拟信号输出到硬件(声卡)的进程。matlab有一个模拟输出函数库,能够树立模拟输出目标和通道:analogoutput函数。
办法如下:
[y,Fs,bits] = wavread(‘dl.wav’); %获取音乐数据
ao = analogoutput(‘winsound’); %树立硬件目标
addchannel(ao,[1 2]); %创立声响输出通道
set(ao,’SampleRate’,Fs) %设置采样率
data1 =y(:,1); %双声道
data2 =y(:,2);
putdata(ao,[data1 data2]); %往声卡堆音乐数据
start(ao); %输出音乐数据
此刻还能够持续堆数,一旦堆得数输出完,ao主动中止。
当想让音乐中止时,只需要:stop(ao)即可。
3.暂停/持续
暂停/持续的功用,不能按上述办法完成。
能够先堆1秒的数据,然后TimerFcn设为1秒,每次进入TimerFcn时只堆1秒的数据,假如暂停标志为true,则堆1秒的数据0;若暂停标志为false,则堆1秒的音乐数据。
如此,暂停功用即可完成,并且,载入的音乐数据理论能够无限大。。。
4.循环播映的另一种办法
除了【俄罗斯方块】程序中的办法外,还能够用下面更简略的办法,来完成循环播映。
模拟输出目标的特点如下:
BufferingConfig = [1024 1173]
BufferingMode = Auto
Channel = [2×1 aochannel]
ClockSource = Internal
EventLog = [1×2 struct]
InitialTriggerTime = [2009 9 12 10 25 11.156]
MaxSamplesQueued = 1.34154e+008
Name = winsound0-AO
RepeatOutput = 0
Running = On
RuntimeErrorFcn = @daqcallback
SampleRate = 11025
SamplesAvailable = 991382
SamplesOutput = 207083
SamplesOutputFcn = []
SamplesOutputFcnCount = 1024
Sending = On
StartFcn = []
StopFcn = []
Tag =
Timeout = 1
TimerFcn = global ao xianjian;putdata(ao,[xianjian(:,1) xianjian(:,2)]);
TimerPeriod = 100
TriggerFcn = []
TriggersExecuted = 1
TriggerType = Immediate
Type = Analog Output
UserData = []
WINSOUND specific properties:
BitsPerSample = 16
StandardSampleRates = On
在TimerFcn中设置RepeatOutput特点,能够完成循环播映。