2010-09-22 57 views
3

好的,我在开始使用这个时遇到了问题。我试图使用soundsc功能八度,但我不断收到此错误:在Windows 8上使用soundsc在Octave中

error: sound.m: No command line utility found for sound playing 

我已搜索周围的一些在网络上,但无法找到该怎么做。下面是对文件的源代码,我就包含错误的网找到了一个链接:http://octave-audio.sourcearchive.com/documentation/1.1.3/sound_8m-source.html

我认为这个错误来自这里:

## What do we use for playing? 
    global sound_play_utility; 
    if ~isempty(sound_play_utility), 
    ## User specified command 
    elseif (file_in_path(EXEC_PATH, "ofsndplay")) 
    ## Mac 
    sound_play_utility = "ofsndplay -" 
    elseif (file_in_path(EXEC_PATH, "play")) 
    ## Linux (sox) 
    sound_play_utility = "play -t AU -"; 
    else 
    error("sound.m: No command line utility found for sound playing"); 
    endif 

我只是这么碰巧使用的是Windows 7,所以我想我必须以某种方式指定我的自我?更改源代码?我不知道我应该做些什么才能使其发挥作用!谁能告诉我?

回答

3

您链接到该文件包括在顶部,其中包括以下文件:

## This function writes the audio data through a pipe to the program 
## "play" from the sox distribution. 

所以,你需要安装sox,对于初学者。这将包括play.exe。然后,您必须将Octave中的全局变量sound_play_utility的值设置为反映您安装的位置sox,或确保file_in_path(EXEC_PATH)的东西可以找到play.exe。从您发布的代码片段中查找几行,看起来文件将该变量传递给popen,该代码将启动一个新进程。我从来没有在Windows机器上的Octave上做过这样的事情,所以我无法帮助您了解确切的细节。

1

通过查看代码,您基本上可以看到您所要做的事情。 Octave模块首先检查您是否将全球sound_play_utility设置为您想用来播放声音的实用程序。这真的是你的选择,实际上,Windows上的任何音频播放器都应该可以工作(mplayer,foobar,Winamp,无论如何)。

只有当该变量为空时,其他检查才会失败,因此只需导出一个全局并将其设置为已安装的播放器的路径即可。

+0

我认为,虽然我不确定,但代码期望将音频数据传递到管道,而不是文件(请参阅'fwrite'行)。我不知道Winamp等能否处理这个问题。但是,我也不知道'sox'在Windows上是否会像预期的那样运行。 – mtrw 2010-09-22 00:29:16

+0

我只是在谈论播放音频。对于这个模块提供的其他东西,是的,你需要安装sox。你应该考虑upvoting /接受mtrw的答案,在这方面已经死了。 – 2010-09-22 00:33:35

6

我不知道这是否适用于Windows 7也一样,但这是我如何设法soundsc,SOx和倍频程在Windows XP上运行: 假设您已经倍频程已经安装,

  1. 下载并为Win32安装sox:http://sox.sourceforge.net/
  2. 转到安装了sox的目录(例如C:\ sox-14-3-1),复制“sox.exe”并将副本重命名为“play ”。重要提示:您必须删除“.exe”文件扩展名!确保你已经在资源管理器中设置了显示文件扩展名的设置。
  3. 用命令行参数启动Octave --exec -path C:\ sox-14-3-1(或者您选择安装sox的任何路径)。 (如果您使用的是qtoctave作为GUI,您可以在“八度”参数中的设置中的“八度”选项卡中进行设置)

现在八度应该找到“播放” 。

您可以用下面的代码试试吧,这应该产生一些丑陋的哔哔声;-)

% Sampling theorem - mirror frequency 
% s3s11_1.m * mw * 11/17/2007 
FS = 8000; % sampling frequency in Hz 
t = 0:1/FS:1; % normalized time 
x = []; 
for k = 1:7 
x = [x sin(2*pi*k*1e3*t)]; % signal 1...7 kHz 
end 
soundsc(x,FS) % sound 

希望有所帮助:-)。

+1

它对我有用 – 2010-10-13 18:49:35

+0

也为我工作 - 非常感谢! – HanClinto 2011-10-04 20:51:31

1

我不相信所有的音频播放器都能正常工作。他们必须能够通过管道播放AU文件到标准输入。这里是Octave命令,我用它来启用VLC播放。您可能需要调整VLC_PROGRAM变量中VLC程序的路径。

VLC_PROGRAM="c:/Program Files (x86)/VideoLan/VLC/vlc"; 
VLC_OPTIONS="-q --play-and-exit -";  
sound_play_utility=["cmd /c \"" VLC_PROGRAM "\" " VLC_OPTIONS];  
clear VLC_PROGRAM VLC_OPTIONS; 

我建议你.octaverc启动文件放置这些命令,使您的声音播放器将自动配置启动倍频每次。