八度似乎假定一个特定的声音播放工具将提供一个系统上,但似乎并没有提供指定替代的能力。 在下面的错误,八度正在寻找ofsndplay
,这是不是在所有系统上可用的工具。
八度:38>声音(beamformed_20)
SH:ofsndplay:命令未找到
是否有一个八度的配置设置或代码片段,我可以使用指定的系统相适应的效用?
八度似乎假定一个特定的声音播放工具将提供一个系统上,但似乎并没有提供指定替代的能力。 在下面的错误,八度正在寻找ofsndplay
,这是不是在所有系统上可用的工具。
八度:38>声音(beamformed_20)
SH:ofsndplay:命令未找到
是否有一个八度的配置设置或代码片段,我可以使用指定的系统相适应的效用?
我已经覆盖从下面的函数倍频的playaudio功能。 这将只安装袜后工作。
sudo apt-get install sox
(Ubuntu的)
function [ ] = playaudio (x, sampling_rate)
if nargin == 1
sampling_rate = 8000
end
file = tmpnam ();
file= [file, '.wav'];
wavwrite(x, sampling_rate, file);
['play ' file ]
system(['play ' file ]);
system(['rm ' file]);
end
类似的方法可以让你记录过:
% Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2003, 2004, 2005,
% 2006, 2007 John W. Eaton
%
% This file is part of Octave.
%
% Octave is free software; you can redistribute it and/or modify it
% under the terms of the GNU General Public License as published by
% the Free Software Foundation; either version 3 of the License, or (at
% your option) any later version.
%
% Octave is distributed in the hope that it will be useful, but
% WITHOUT ANY WARRANTY; without even the implied warranty of
% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
% General Public License for more details.
%
% You should have received a copy of the GNU General Public License
% along with Octave; see the file COPYING. If not, see
% <http://www.gnu.org/licenses/>.
% -*- texinfo -*-
% @deftypefn {Function File} {} record (@var{sec}, @var{sampling_rate})
% Records @var{sec} seconds of audio input into the vector @var{x}. The
% default value for @var{sampling_rate} is 8000 samples per second, or
% 8kHz. The program waits until the user types @key{RET} and then
% immediately starts to record.
% @seealso{lin2mu, mu2lin, loadaudio, saveaudio, playaudio, setaudio}
% @end deftypefn
% Author: AW <Andreas.Weingessel@ci.tuwien.ac.at>
% Created: 19 September 1994
% Adapted-By: jwe
% And adapted again 11/25/2010 by Rob Frohne
function X = record (sec, sampling_rate)
if (nargin == 1)
sampling_rate = 8000;
elseif (nargin != 2)
print_usage ();
endif
file = tmpnam ();
file= [file,".wav"];
input ("Please hit ENTER and speak afterwards!\n", 1);
cmd = sprintf ("rec -c1 -r%d %s trim 0 %d",
sampling_rate, file, sec)
system (cmd);
X = wavread(file);
end
安装alsa-utils的或的pulseaudio-utils的 ,把下面的你的〜/ .octaverc:
global sound_play_utility = 'aplay';
要么
global sound_play_utility = 'paplay';
在我的Linux机器之一,我创建了以下ofsndplay脚本来解决硬连线的依赖:
$ cat /usr/bin/ofsndplay
#!/bin/sh
## Coping with stupid dependency on ofsndplay in octave
play -t au -
这种特殊的脚本使用SOX play
效用。
诚然,注释是不必要的功能,但它确实让我感觉更好....
playaudio
坏了! 这是值得一读的默认实现playsound
(3.6.2版本):
function playaudio (name, ext)
if (nargin < 1 || nargin > 2)
print_usage ();
endif
if (nargin == 1 && isnumeric (name))
## play a vector
if (! isvector (name))
error ("playaudio: X must be a vector");
endif
X = name(:) + 127;
unwind_protect
file = tmpnam ();
fid = fopen (file, "wb");
fwrite (fid, X, "uchar");
fclose (fid);
[status, out] = system (sprintf ('cat "%s" > /dev/dsp', file));
if (status != 0)
system (sprintf ("paplay --raw \"%s\"", file))
endif
unwind_protect_cleanup
unlink (file);
end_unwind_protect
elseif (nargin >= 1 && ischar (name))
## play a file
if (nargin == 1)
name = [name ".lin"];
elseif (nargin == 2)
name = [name "." ext];
endif
if (any (strcmp (ext, {"lin", "raw"})))
[status, out] = system (sprintf ('cat "%s" > /dev/dsp', name));
if (status != 0)
system (sprintf ('paplay --raw "%s"', name))
endif
elseif (any (strcmp (ext, {"mu", "au" "snd", "ul"})))
[status, out] = system (sprintf ('cat "%s" > /dev/audio', name));
if (status != 0)
system (sprintf ('paplay "%s"', name))
endif
else
error ("playaudio: unsupported extension '%s'", ext);
endif
else
print_usage ();
endif
endfunction
有一些事情需要注意:
cat > /dev/dsp
线)。 paplay
,命令行的PulseAudio球员。 paplay
通话将永远不会起作用,因为paplay
默认为s16ne
(可能是一个错字,我认为他们的意思s16be
-符号的16位大端)和playaudio
写入8位无符号! system()
总是一个坏主意。 这个功能是非常哈克,不安全和不可靠的。 如果以任何方式代表了代码质量的倍频别处......嗯,这是令人担忧的。 应该真的要在八度使用portaudio作为重新实现应有的功能。
我真的没有时间或动机做黑客在八度的很多,所以在此期间,我建议你改用这种稍好功能:
function playsound(wav, samplerate)
# Play a single-channel wave at a certain sample rate (defaults to 44100 Hz).
# Input can be integer, in which case it is assumed to be signed 16-bit, or
# float, in which case it is in the range -1:1.
if (nargin < 1 || nargin > 2)
print_usage();
endif
if (nargin < 2)
samplerate = 44100;
end
if (!isvector(wav))
error("playsound: X must be a vector");
endif
# Write it as a 16-bit signed, little endian (though the amaaazing docs don't say the endianness)
# If it is integers we assume it is 16 bit signed. Otherwise we assume in the range -1:1
if (isfloat(wav))
X = min(max(wav(:), -1), 1) * 32767; # Why matlab & octave do not have a clip() function... I do not know.
else
X = min(max(wav(:), -32767), 32767) + 32767;
endif
unwind_protect
file = tmpnam ();
fid = fopen (file, "wb");
fwrite (fid, X, "int16");
fclose (fid);
# Making aplay (alsa) the default, because let's be honest: it is still way more reliable than
# the mess that is pulseaudio.
if (exist("/usr/bin/aplay") == 2)
system(sprintf("/usr/bin/aplay --format=S16_LE --channels=1 --rate=%d \"%s\"", samplerate, file))
elseif (exist("/usr/bin/paplay") == 2)
system(sprintf("/usr/bin/paplay --format=s16le --channels=1 --rate=%d --raw \"%s\"", samplerate, file))
endif
unwind_protect_cleanup
unlink (file);
end_unwind_protect
endfunction
这仍然是一个非常哈克功能。 但它应该至少一点点比更可靠playaudio
! 我会离开的实现soundsc
作为练习留给读者。
我是一台Mac(优胜美地),并发现了一个比别人建议简单的解决方案。 以防万一,这仍然是相关的人:
首先安装SOX: http://sox.sourceforge.net/
(通过自制)
brew install sox
现在终端命令行中,你可以使用:
play “/path/to/sound file.wav"
......你会听到优美的音乐。
但该命令没有从内倍频工作。 这并不工作:
system(‘play “/path/to/sound file.wav”’);
在OSX,这是我做的,以获得良好的工作:
从sound
命令的帮助:
This function writes the audio data through a pipe to the program "play" from the sox distribution. sox runs pretty much anywhere, but it only has audio drivers for OSS (primarily linux and freebsd) and SunOS. In case your local machine is not one of these, write a shell script such as ~/bin/octaveplay, substituting AUDIO_UTILITY with whatever audio utility you happen to have on your system: #!/bin/sh cat > ~/.octave_play.au SYSTEM_AUDIO_UTILITY ~/.octave_play.au rm -f ~/.octave_play.au and set the global variable (e.g., in .octaverc) global sound_play_utility="~/bin/octaveplay";
我叫下面的脚本“octaveplay”,并把它放在〜/斌:
cat > ~/.octave_play.aif
afplay ~/.octave_play.aif
rm -f ~/.octave_play.aif
然后,我创建.octaverc并补充说: global sound_play_utility="~/bin/octaveplay";
瞧!
在八度4.2.1。 可以按如下方式播放wav文件
请将以下代码保存在一个文件playWav.m
function playWav(inputFilePath)
[y, fs] = audioread(inputFilePath);
player = audioplayer(y, fs);
playblocking(player)
end
然后,你可以调用函数为playWav('/path/to/wavfile');
从八度的命令行。
经测试在Windows 7上。