网站首页
IC库存
IC展台
电子资讯
技术资料
PDF文档
我的博客
IC72论坛
ic72 logo
资料首页最新产品 技术参数 电路图 设计应用 解决方案 代理商查询 IC替换 IC厂商 电子辞典
关键字: 技术文章 PDF资料 IC价格 电路图 代理商查询 IC替换 IC厂商 电子辞典

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 = [2x1 aochannel]

ClockSource = Internal

EventLog = [1x2 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属性,可以实现循环播放。

热门搜索:01M2251SFC3 SBB830-QTY10 TLM609NS PS6020 01T5001JF PS-415-HG PS4816 ADS1013IDGSR 2320322 PS120420 TLP808TEL N060-002 TLP725 PS240406 ADS1013IDGSR SBB8006-SS-1 TLM825GF 02B5000JF PDUMH15 PS-615-HG DRV8313PWPR TLP76MSG TLP606B BT152-500R/600R TLP606
COPYRIGHT:(1998-2010) IC72 达普IC芯片交易网
客户服务:service@IC72.com 库存上载:IC72@IC72.com
(北京)联系方式: 在线QQ咨询:点击这里给我发消息 联系电话:010-82614113 传真:010-82614123
京ICP备06008810号-21 京公网安备 11010802032910 号 企业资质