我一直试图让我的应用程序录制来自麦克风的声音,然后(近似)实时播放,但是没有成功.
我分别使用AudioRecord和AudioTrack类进行录制和播放.我尝试了不同的方法,我试图记录传入的声音并将其写入文件,它工作正常.我也尝试使用AudioTrack播放该文件后的声音,它也可以正常工作.问题是当我尝试实时播放声音时,而不是在写完后读取文件.
这是代码:
//variables
private int audioSource = MediaRecorder.AudioSource.MIC;
private int samplingRate = 44100; /* in Hz*/
private int channelConfig = AudioFormat.CHANNEL_CONFIGURATION_MONO;
private int audioFormat = AudioFormat.ENCODING_PCM_16BIT;
private int bufferSize = AudioRecord.getMinBufferSize(samplingRate, channelConfig, audioFormat);
private int sampleNumBits = 16;
private int numChannels = 1;
// …
AudioRecord recorder = new AudioRecord(audioSource, samplingRate, channelConfig, audioFormat, bufferSize);
recorder.startRecording();
isRecording = true;
AudioTrack audioPlayer = new AudioTrack(AudioManager.STREAM_MUSIC, 44100, AudioFormat.CHANNEL_CONFIGURATION_MONO,
AudioFormat.ENCODING_PCM_16BIT, bufferSize, AudioTrack.MODE_STREAM);
if(audioPlayer.getPlayState() != AudioTrack.PLAYSTATE_PLAYING)
audioPlayer.play();
//capture data and record to file
int …Run Code Online (Sandbox Code Playgroud) 我需要存储一个临时的记录列表,并认为这TList是一个很好的方法吗?但是我不确定如何用a做这个TList并且想知道这是否是最好的,并且如果有人有任何如何做到这一点的例子?
我正在寻找一种在不需要实际数据时简化功能模式的方法:
data X = A | B String | C Int Int String
myfn :: X -> Int
myfn A = 50
myfn (B _) = 200
myfn (C _ _ _) = 500
Run Code Online (Sandbox Code Playgroud)
有没有办法为匹配C制作一个更简单的模式,只是丢弃这些值?
hsdev添加了一个提示"提示:使用记录模式",但谷歌并没有帮助我.
我只是想知道为什么大多数Delphi示例使用FillChar()来初始化记录.
type
TFoo = record
i: Integer;
s: string; // not safe in record, better use PChar instead
end;
const
EmptyFoo: TFoo = (i: 0; s: '');
procedure Test;
var
Foo: TFoo;
s2: string;
begin
Foo := EmptyFoo; // initialize a record
// Danger code starts
FillChar(Foo, SizeOf(Foo), #0);
s2 := Copy("Leak Test", 1, MaxInt); // The refcount of the string buffer = 1
Foo.s = s2; // The refcount of s2 = 2
FillChar(Foo, SizeOf(Foo), #0); // The refcount …Run Code Online (Sandbox Code Playgroud) 我刚刚在一段Haskell代码中遇到了以下语法 -
data A = A Int Int | B
m :: A -> Int
m a = case a of
A{} -> 1
_ -> 2
Run Code Online (Sandbox Code Playgroud)
这是A{}做什么的?是否{}自动匹配任意数量的参数?
我有一种感觉,这是在利用Haskell记录语法对一堆函数和常规代数数据类型的去除这一事实.是这样的吗?
使用存在类型时,我们必须使用模式匹配语法来提取foralled值.我们不能将普通记录选择器用作函数.GHC报告错误并建议使用与以下定义的模式匹配yALL:
{-# LANGUAGE ExistentialQuantification #-}
data ALL = forall a. Show a => ALL { theA :: a }
-- data ok
xALL :: ALL -> String
xALL (ALL a) = show a
-- pattern matching ok
-- ABOVE: heaven
-- BELOW: hell
yALL :: ALL -> String
yALL all = show $ theA all
-- record selector failed
Run Code Online (Sandbox Code Playgroud)
forall.hs:11:19:
Cannot use record selector `theA' as a function due to escaped type variables
Probable fix: use …Run Code Online (Sandbox Code Playgroud) 创建不可变的数据结构,我真的很喜欢 Scala 的概念,您可以使用案例类(具有私有规范构造函数)和伴随对象,以这种方式仅通过工厂方法强制对象实例化。
final case class Foo private(a: Int)
object Foo {
def apply(left: Int, right: Int) = Foo(left + right)
}
Run Code Online (Sandbox Code Playgroud)
Java 14 中引入了记录的概念,提供了 Scala 的大部分案例类功能。然而,制作记录的规范构造函数private似乎有点麻烦......有没有办法用Java的记录实现相同的行为?