我正在构建一个Android应用程序,具有通过麦克风捕获声音并通过耳机播放的功能.为此,我使用了"AudioRecord"和"AudioTrack".以下是我正在使用的代码的一部分(仅用于理解)
mInBufferSize = AudioRecord.getMinBufferSize(mSampleRate,
AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat);
mOutBufferSize = AudioTrack.getMinBufferSize(mSampleRate,
AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat);
mAudioInput = new AudioRecord(MediaRecorder.AudioSource.MIC,
mSampleRate, AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat,
mInBufferSize);
mAudioOutput = new AudioTrack(AudioManager.STREAM_MUSIC, mSampleRate,
AudioFormat.CHANNEL_CONFIGURATION_MONO, mFormat,
mOutBufferSize, AudioTrack.MODE_STREAM);
Run Code Online (Sandbox Code Playgroud)
但主要的问题是我想以mp3格式录制传入的声音?请帮助我,我真的很感激......
提前致谢
我使用ffmpeg使用以下代码记录窗口:
ffmpeg.exe
-f dshow
-y
-i video="screen-capture-recorder":audio="virtual-audio-capturer":audio="Microphone (USB Audio Device)"
-framerate 15
-vcodec libx264
-crf 0
-preset ultrafast
-acodec pcm_s16le
-vf crop=Width:Height:Left:Top
output.flv
Run Code Online (Sandbox Code Playgroud)
但问题是我可能会移动窗口,这会导致记录一个没有我想要的窗口的区域.
如何捕获我能够移动它的特定窗口?
编辑:我也习惯gdigrab捕捉我的窗口(Skype例如)而不是dshow:
ffmpeg.exe
-y
-f dshow
-i audio="virtual-audio-capturer":audio="Microphone (USB Audio Device)"
-f gdigrab
-draw_mouse 0
-i title="Skype"
-framerate 30
-vcodec libx264
-crf 0
-preset ultrafast
-acodec pcm_s16le
output.flv
Run Code Online (Sandbox Code Playgroud)
但会议是黑色的......
假设我有两种数据类型Foo和Bar.Foo有字段x和y.条形图有字段x和z.我希望能够编写一个函数,它将Foo或Bar作为参数,提取x值,对其执行一些计算,然后返回一个新的Foo或Bar,并相应地设置x值.
这是一种方法:
class HasX a where
getX :: a -> Int
setX :: a -> Int -> a
data Foo = Foo Int Int deriving Show
instance HasX Foo where
getX (Foo x _) = x
setX (Foo _ y) val = Foo val y
getY (Foo _ z) = z
setY (Foo x _) val = Foo x val
data Bar = Bar Int Int deriving Show
instance HasX Bar where
getX (Bar x _) = x
setX (Bar …Run Code Online (Sandbox Code Playgroud) 我有两种数据类型,用于hastache模板.在我的代码中有两种不同的类型是有意义的,都有一个名为"name"的字段.当然,这会引发冲突.似乎有一种机制可以消除对"name"的任何调用的歧义,但实际的定义会导致问题.是否有任何解决方法,比如让记录字段名称合格?
data DeviceArray = DeviceArray
{ name :: String,
bytes :: Int }
deriving (Eq, Show, Data, Typeable)
data TemplateParams = TemplateParams
{ arrays :: [DeviceArray],
input :: DeviceArray }
deriving (Eq, Show, Data, Typeable)
data MakefileParams = MakefileParams
{ name :: String }
deriving (Eq, Show, Data, Typeable)
Run Code Online (Sandbox Code Playgroud)
即如果字段现在在代码中使用,它们将是"DeviceArray.name"和"MakefileParams.name"?
我正在为多轨录音机设计一个简单的概念证明.
明显的出发点是从文件A.caf播放到耳机,同时将麦克风输入录制到文件B.caf中
这个问题 - 同时录制和播放音频 - 指出我可以在三个级别工作:
工作的最佳水平是什么?显然,通用答案是在完成工作的最高级别工作,这将是AVFoundation.
但是,由于延迟问题(他在文件之间有0.3秒的延迟),我正在接受这项工作,所以也许我需要在较低级别工作以避免这些问题?
此外,跳板有哪些源代码?我一直在看SpeakHere示例(http://developer.apple.com/library/ios/#samplecode/SpeakHere/Introduction/Intro.html).如果我找不到更简单的东西,我会用它.
但是,任何人都可以建议更简单/其他吗?如果我能避免它,我宁愿不使用C++代码.
有人知道一些使用AVFoundation的公共代码吗?
编辑:AVFoundation示例:http ://www.iphoneam.com/blog/index.php?title=using-the-iphone-to-record-audio-a-guide&more=1&c=1&tb=1&pb =1
编辑(2):这里看起来好多了:http://www.switchonthecode.com/tutorials/create-a-basic-iphone-audio-player-with-av-foundation-framework
在我的申请中,我有以下记录:
TTransaction = record
Alias: string
Description: string
Creation: TDateTime
Count: Integer
end;
Run Code Online (Sandbox Code Playgroud)
我在这个数组中使用此记录:
Transactions = array of TTransaction;
Run Code Online (Sandbox Code Playgroud)
我在运行时保持数组加载,但在给定时间我需要清除所有数据并添加一些新数据.
仅仅使用它就足够了:
SetLength(Transactions, 0); ?
Run Code Online (Sandbox Code Playgroud)
或者我需要完成一些事情吗?
阅读"类型和编程语言",我对使用闭包和记录子类型的对象实现印象深刻(第18章).是否有任何特殊原因OCaml不支持记录子类型(我知道对象确实如此)?事实上,我找不到任何支持这种语言的语言.
我有以下代码编译在我的程序中:
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE GADTs #-}
{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE StandaloneDeriving #-}
{-# LANGUAGE TypeFamilies #-}
class (Show (Data a)) => HasData (a :: *) where
type Data a :: *
data Foo :: * -> * where
Foo :: (HasData a) => String -> Data a -> Int -> Foo a -- bunch of args
deriving instance Show (Foo a)
Run Code Online (Sandbox Code Playgroud)
由于Foo构造函数的参数数量可以很多,我想使用记录语法编写代码,但我无法弄清楚如何使用GADT语法(GHC弃用的数据类型上下文,所以我试图避免它们) :
data Foo :: * -> * where
Foo {
getStr …Run Code Online (Sandbox Code Playgroud) 我正在寻找一种简洁的方法来更新Elm(0.18)中记录内的嵌套值.
给出以下示例:
person = { name = "Steven", address = { country = "Spain", city = "Barcelona" } }
Run Code Online (Sandbox Code Playgroud)
我可以使用以下表达式将person.name更新为"Steve":
{ person | name = "Steve" }
Run Code Online (Sandbox Code Playgroud)
但是,我正在寻找一种更新嵌套值的方法.例如,我想将person.address.city更新为"Madrid".我尝试了以下方法:
{ person | address.city = "Madrid" }
{ person | address = { address | city = "Madrid" } }
{ person | address = { person.address | city = "Madrid" } }
Run Code Online (Sandbox Code Playgroud)
编译器拒绝所有这些变化.我看到的最短有效选项是:
let personAddress = person.address in { person | address = { personAddress | city = "Madrid" } } …Run Code Online (Sandbox Code Playgroud) 我刚刚开始使用 C# 9 和 .NET 5.0,特别是新record结构。我发现我有很多关于记录类型速记语法的优秀用例。
我考虑过的用例之一是对 ASP.NET Core 应用程序使用recorddto in IOptions<>,而不是常规类。这些选项类通常很简单,所以我认为它非常适合,但似乎我不能让它轻松工作,因为使用配置应用程序IOptions<>需要对象具有无参数构造函数。
public record MyOptions(string OptionA, int OptionB);
public class Startup
{
public void ConfigureServices(IServiceCollection services) {
services.Configure<MyOptions>(Configuration.GetSection(nameof(MyOptions)));
}
...
}
public class MyController : Controller
{
private readonly MyOptions _options;
public MyController(IOptions<MyOptions> options) {
_options = options.Value; // This throws an exception at runtime
}
}
Run Code Online (Sandbox Code Playgroud)
上面的示例在尝试访问该IOption<>.Value属性时抛出以下异常:
System.MissingMethodException: '没有为类型 'AcmeSolution.MyOptions' 定义无参数构造函数。
有没有办法配置IOptions配置系统以使用记录的构造函数反序列化选项,而不是需要无参数的构造函数?
我可以对记录使用普通语法,但是使用类确实没有任何好处。