1、webread 读取内容

从 RESTful Web 服务

data = webread(url) 

从 url 指定的 Web 服务读取内容并在 data 中返回内容。
返回的是结构体数组(struct array)等等类型

如果想要存储数据,比如另存为Excel文件

xlswrite  %(不推荐)写入 Microsoft Excel 电子表格文件

不推荐使用 xlswrite。请改用 writetable、writematrix 或 writecell。

xlswrite(filename,A) 
将矩阵 A 写入 Microsoft® Excel® 电子表格工作簿 filename 中的第一个工作表,从单元格 A1 开始写入。

writetable(T)
将表 T 写入逗号分隔的文本文件。文件名为表的工作区变量名称,附加扩展名 .txt。

writetable(T,filename)
写入具有 filename 指定的名称和扩展名的文件。
# # First argument must be a table.  struct2table(data)

writetable(___,Name,Value)
通过一个或多个 Name,Value 对组参数指定的其他选项将表写入文件中,并且可以包含以前语法中的任何输入参数。
  1. data = webread(url) 从网络请求中获取数据
  2. table = struct2table(data) 结构体数组转换成table表格
  3. writetable(table,filename) 将table表格写入文件中
data = webread(url,QueryName1,QueryValue1,...,QueryNameN,QueryValueN)

照一个或多个名称-值对组参数指定的方式将查询参数追加到 url。要将查询放入消息主体,请使用 webwrite。Web 服务定义查询参数。

2、webread 调用网易云 API

首先要通过Matlab读取音乐,并实现进行播放的功能。

[y,Fs] = audioread(filepath)
从名为 filename 的文件中读取数据,并返回样本数据 y 以及该数据的采样率 Fs。

player = audioplayer(y,Fs)
使用采样率 Fs 为信号 Y 创建 audioplayer 对象。该函数返回音频播放器对象 player。

play(player)	开始播放歌曲

stop(player)	终止播放歌曲

pause(player)	暂停播放歌曲

resume(player)	继续播放歌曲

我们这次的方法是调用网易云音乐的API接口,获取音乐源文件。

接口:处理加工后的接口:由 https://api.vvhan.com/ 提供

请求示例 (mp3 输出):
https://api.vvhan.com/api/rand.music?sort=热歌榜

请求示例 (JSON 输出):
https://api.vvhan.com/api/rand.music?type=json&sort=热歌榜

具体过程

data = webread("https://api.vvhan.com/api/rand.music?type=json&sort=热歌榜")
获取接口返回的数据,用变量data保存

data 数据

在这里插入图片描述

data.info的数据

在这里插入图片描述

name :歌曲的名称

auther :歌曲的歌手名称

picUrl : 歌曲的封面图片 地址

mp3url :歌曲源文件 MP3 地址

简单测试播放代码

data = webread("https://api.vvhan.com/api/rand.music?type=json&sort=热歌榜");
music_infor = data.info
% 获取音频的数字信号y,和采样频率Fs
[y,Fs] = audioread(music_infor.mp3url); 
% 使用采样率 Fs 为信号 Y 创建 audioplayer 对象。该函数返回音频播放器对象 player。
player = audioplayer(y,Fs); 
% 开始播放 音频播放器对象 player
play(player);

3、GUI 随机音乐播放器

Player 对象函数

Player 对象函数 Player 对象函数介绍
get 查询 audioplayer 对象的属性值
isplaying 查询 audioplayer 对象的属性值
pause 暂停播放或录制
play 从 audioplayer 对象播放音频
playblocking 播放 audioplayer 对象中的音频,保持控制权直到播放完成
resume 从暂停状态继续播放或录制
set 设置 audioplayer 对象的属性值
stop 停止播放或录制

Player 对象属性

BitsPerSample - 采样位数。			正整数

CurrentSample - 当前播放的样本。		正整数

DeviceID - 音频设备标识符。			整数

NumChannels - 音频通道数				1 | 2

Running - 音频播放器状态				on | off

SampleRate - 采样频率				数值标量

TotalSamples - 音频数据的总长度		整数

Tag - 标签							字符向量

Type - 对象类名						'audioplayer'

UserData - 用户定义的数据			[] (默认) | 任意数据类型

StartFcn - 在开始时要执行的函数		字符向量 | 字符串标量 | 函数句柄

StopFcn - 在结束时要执行的函数		字符向量 | 字符串标量 | 函数句柄

TimerFcn - 要重复执行的函数			字符向量 | 字符串标量 | 函数句柄

TimerPeriod - 计时器周期				0.05 (默认) | 数值标量

Gui 界面设计

在这里插入图片描述
获取新的歌曲的代码:

	global player time
	data = webread("https://api.vvhan.com/api/rand.music?type=json&sort=热歌榜");
	music_infor = data.info;
	app.MusicName.Text = music_infor.name;
	app.MusicSinger.Text = music_infor.auther;
	% 获取音频的数字信号y,和采样频率Fs
	[y,Fs] = audioread(music_infor.mp3url);
	time = (length(y(:,1))/Fs);
	
	Logo=imread(music_infor.picUrl);
	app.MusicLogo.ImageSource = Logo;
	app.MusicTime.Text = append('0:00',' / ',app.sec2ms(time));
	% 使用采样率 Fs 为信号 Y 创建 audioplayer 对象。该函数返回音频播放器对象 player。
	
	app.MusicHistory.Items(end+1) = {music_infor.name};
	player = audioplayer(y,Fs); 
	play(player)
	delete(timerfind)
	function process(timer,event)
	    app.MusicProcess.Value = (player.CurrentSample / player.TotalSamples);
	    app.MusicTime.Text = append(app.sec2ms(time*(player.CurrentSample / player.TotalSamples)),' / ',app.sec2ms(time));
	end
	
	t = timer('StartDelay', 1,'Period', 1,'TasksToExecute', Inf,'ExecutionMode','fixedRate');
	t.TimerFcn = @ process;
	
	start(t)
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐