我正在尝试从文本文件数据中提取并将其添加到音频读取函数 Matlab

Posted

技术标签:

【中文标题】我正在尝试从文本文件数据中提取并将其添加到音频读取函数 Matlab【英文标题】:I am trying to extract from text file data and add it into the audioread function Matlab 【发布时间】:2020-10-08 14:40:55 【问题描述】:

我正在从 txt 文件中提取一些数据“名称”,并尝试将该名称用于 audioread() 函数,以便进入 Matlab 位置并打开相应的音频信号 WAV 或 mp3。

 fid = fopen('names.txt','rt');
           text= fscanf(fid,'%s',1);
           index = 0;
           text = fscanf(fid,'%s',1);
           while(strcmp(text,'.')~=1)            
            index = index+1;            
            storeDindex = text;
            signal=strcat('''',storeD,'.wav''');% or mp3
            x=audioread(signal);
            text = fscanf(fid,'%s',1);
            end
           fclose(fid);

现在的问题是我收到一个错误: 预期输入为非缺失字符串标量或字符向量。对于这里的这一行 x=audioread(signal);

【问题讨论】:

【参考方案1】:

我更喜欢将多个音频信号存储在一个结构中,因为它们可以是可变长度的,并且不能很好地适合数组的一个变量。也只是调整了一些名称解析。我还假设文本文件会这样配置:

names.txt:

Jacob
Shawn
Sydney
Maria
Joseph
.

如果文件位于名为 Music 的子文件夹中:

./Music/Jacob
./Music/Shawn
./Music/Sydney
./Music/Maria
./Music/Joseph
.

根据文件中字符串的格式,可能需要编辑此行:

signal = strcat(storeD,'.wav');% or mp3

MATLAB 脚本:

Signal_Number = 1;
Audio_Signals = struct('Audio_File',[]);

fid = fopen('names.txt','rt');

%Grabbing the first name to start%
index = 1;
text = fscanf(fid,'%s',1);

%Continue to loop%
while(strcmp(text,'.')~=1)   
    
storeDindex = text;
index = index+1;            
signal = strcat(storeD,'.wav');% or mp3


Audio_Signals(Signal_Number).Audio_File = audioread(signal1,Signal_Number);
Signal_Number = Signal_Number + 1;
text = fscanf(fid,'%s',1);
end
fclose(fid);

Fs = 44100;
Audio_1 = Audio_Signals(1).Audio_File;
Audio_2 = Audio_Signals(2).Audio_File;
Audio_3 = Audio_Signals(3).Audio_File;

%Playing audio 1%
sound(Audio_3,Fs);

storeD

扩展:根据文本文件名读取 LAB 和 CSV 文件

.LAB 文件的内容

Alex\A23
John\B21
Nick\K36

使用 MATLAB 版本:R2019b

【讨论】:

非常感谢您的帮助和解释,现在唯一的问题是 Audio_1 对应于文件中的音频 2。比如 John wav 是第一个,第二个是 Alex,它先播放 Alex,它似乎也跳转了一些文件。 @Grey_Hunter 哦,我认为跳过第一行是有目的的。我试图继承你在原版中的内容。我会编辑它。 我看不到我的错误,你能解释一下吗? 我更新了我的答案。抱歉,从我来的地方来晚了。 我有另一个问题,为了在 CSV 和 LAB 文件中实现相同的逻辑,我需要在 Audio_Signals(Signal_Number).Audio_File = audioread(signal1,Signal_Number);为了兼容?

以上是关于我正在尝试从文本文件数据中提取并将其添加到音频读取函数 Matlab的主要内容,如果未能解决你的问题,请参考以下文章

从 mp4 中提取音轨并将其保存到可播放的音频文件中

从python中的视频中提取音频

如何从 .t​​xt 中提取文本并将其存储到动态二维数组中?

创建一个从数据馈送中读取文本文件并将其转换为 php 的目标文件的函数

iOS从.mov文件中提取音频

如何从文本框中获取数据并将其添加到 dataTable?