八度播放功能中的音频文件

时间:2018-12-02 17:17:50

标签: octave

我想编写一个将音频文件地址作为输入,然后对该音频文件进行一些更改并播放的函数。

我是Octave的新手,通过查看文档,我想到了下面的代码

function main
    % clear screen 
    clear;
    clc;
    audio_src_address = 'introduction.wav';
    NegateAudioPhase(audio_src_address);
endfunction;

function NegateAudioPhase (audio_src_address)
    % load audio source
    [y, fs] = audioread(audio_src_address);

    % use chanel 1 
    y = y(:,1);

    % audio frequency domain
    f = fft(y);
    m = abs(f);
    p = angle(f);

    % negate audio source phase
    p = -p;

    % calculate new fourier transform
    f = m .* exp(j*p);

    % create the new audio source
    y2 = ifft(f);

    % play audio sound
    player = audioplayer(y2, fs);
    play(player);
endfunction

我已将此代码放入main.m文件中。 我使用八度CLI通过键入main并按Enter键来运行代码。

代码将一直运行到最后,但不会播放音频。 执行后,命令行上会出现警告:

warning: Octave:audio-interrupt
warning: called from
    main>NegateAudioPhase at line 33 column 1
    main at line 6 column 5

我将所有代码放置在另一个文件中,但未定义任何功能,并且按预期工作。

2 个答案:

答案 0 :(得分:1)

好吧,我找到了解决该问题的方法。
正如Andy所提到的,问题似乎是函数返回时(到达endfunction)播放器对象被破坏了。所以我也许可以等音频文件完成。

所以我在播放音频后添加了以下代码。

% wait to finish
    while(isplaying(player))
      % Waiting for sound to finish
    endwhile

结果一开始就是我想要的。

答案 1 :(得分:1)

使用函数 playblocking 而不是 play 以等待播放完成。请参阅manual