矩形波を検出してるんだから、矩形波の塊であるアーケード版グラディウスの音だとどうなるんだろう?><と思って、
https://www.youtube.com/watch?v=hz9OkKo9rW0
これ再生してみたけど、起動時のDC成分以外はクリッピングとしては検出しない><(MAMEで動かして直だと誤検出しちゃうかも?><)
ちなみにテストに使用してる超酷いCDはこれです><(アニソンだけど番組見た事無い><)
https://www.amazon.co.jp/dp/B00005GO7X
クリッピング検出するやつ、壊れたサンプルの比率を見るようにして、ついでに5パーセント超えたら「クビだ!!!><#」って表示するようにした><
https://mstdn.nere9.help/media/55qC_c9roiT_ys3NQvs
さっきのちょっと弄って、前から作ろうとしてたリアルタイムクリッピング検出アプリできた!>< https://mstdn.nere9.help/media/0oYK0kk6uBHbLAeNu1w
(正確に言うと矩形波検出だけど普通の楽曲なら正確な矩形波=だいたいクリッピング><)
見つけた
Proposal: 'using' local variable declaration (RAII) · Issue #5881 · dotnet/roslyn https://github.com/dotnet/roslyn/issues/5881
というわけで古いけど読める方の記事です
リソースの管理: use キーワード (F#) https://msdn.microsoft.com/ja-jp/library/dd233240(v=vs.110).aspx
ところでこれは元はF#のコードだった
open CSCore
let capture () =
use capture = new SoundIn.WasapiLoopbackCapture ()
capture.Initialize()
use stream = File.OpenWrite @"r:\dump.m4a"
use writer = new CSCore.Codecs.AAC.AacEncoder (capture.WaveFormat, stream)
capture.DataAvailable.Add <| fun e ->
writer.Write (e.Data, e.Offset, e.ByteCount)
capture.Start ()
System.Console.ReadLine ()
capture.Stop ()
capture ()
WASAPIでのお手軽ループバックキャプチャ、CsCoreでやったことがあった
using (var capture = new CSCore.SoundIn.WasapiLoopbackCapture())
{
capture.Initialize();
using (var stream = File.OpenWrite(@"r:\dump.m4a"))
using (var encoder = new CSCore.Codecs.AAC.AacEncoder(capture.WaveFormat, stream))
{
capture.DataAvailable += (o, e) => encoder.Write(e.Data, e.Offset, e.ByteCount);
capture.Start();
System.Console.ReadLine();
capture.Stop();
}
}