Mein Code wurde nie zuvor für die Verarbeitung von signierten Werten und als solche Bytes verwendet - & gt; Die kurze Konvertierung hat das Vorzeichenbit falsch verarbeitet. Dadurch wurde das Problem behoben.
Ich versuche, die Lautstärke eines PCM-Datenstroms zu ändern. Ich kann einzelne Kanaldaten aus einer Stereodatei extrahieren, verschiedene alberne experimentelle Effekte mit den Samples machen, indem ich sie überspringe / dupliziere / Nullen / etc einfüge, aber ich kann keine Möglichkeit finden, die tatsächlichen Samplewerte irgendwie zu verändern und eine vernünftige Ausgabe.
Meine Versuche sind wirklich einfach: Ссылка
(value = -value funktioniert gut - kehrt die Welle um und es klingt gleich)
Der entsprechende Code ist genauso einfach (I / O verwendet vorzeichenlose Werte im Bereich 0-65535) & lt; - das war das Problem, das Lesen richtig signierter Werte löste das Problem :
%Vor%Ich versuche, die Probe leiser zu machen. Ich würde mir vorstellen, die Amplitude kleiner zu machen (Sample * 0.9) würde zu einer leiseren Datei führen, aber sowohl 4. als auch 5. sind eindeutig ungültig. Es gibt eine ähnliche Frage zu SO wo MusiGenesis sagt, er habe korrekte Ergebnisse mit 'Sample * = 0.75' Art von Code (ja, ich habe mit anderen Werten neben 0.9 und 1.1 experimentiert).
Die Frage ist: Mache ich etwas Dummes oder ist die ganze Idee, sich durch ein konstantes Unrecht zu vermehren? Ich möchte, dass das Endergebnis in etwa so aussieht: Ссылка
Ihr 4. Versuch ist definitiv der richtige Ansatz. Angenommen, Ihr Sample-Bereich ist um 0 zentriert, multipliziert man jedes Sample mit einem anderen Wert, um die Lautstärke oder Verstärkung eines Signals zu ändern.
In diesem Fall würde ich jedoch etwas Lustiges erwarten, das hinter den Kulissen passiert, wenn du ein int mit einem float multiplizierst und zurück ins int wirfst. Schwer zu sagen, ohne zu wissen, welche Sprache Sie verwenden, aber das könnte das Problem verursachen.