【问题标题】:I am trying to extract from text file data and add it into the audioread function Matlab我正在尝试从文本文件数据中提取并将其添加到音频读取函数 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;            
            storeD{index} = text;
            signal=strcat('''',storeD,'.wav''');% or mp3
            x=audioread(signal);
            text = fscanf(fid,'%s',1);
            end
           fclose(fid);

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

【问题讨论】:

    标签: matlab


    【解决方案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)   
        
    storeD{index} = text;
    index = index+1;            
    signal = strcat(storeD,'.wav');% or mp3
    
    
    Audio_Signals(Signal_Number).Audio_File = audioread(signal{1,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(signal{1,Signal_Number});为了兼容?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-05-07
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多