Hallo,
ich versuche, mit bass.net Musik vom Line-In Eingang des Computers über die Lautsprecher abzuspielen, und dabei den Pitch (Tonhöhe) der Musik zu verändern.
Problem dabei ist, dass zum Ändern der Tonhöhe das BASS_STREAM_DECODE-Flag gesetzt sein muss, wodurch ich offenbar den Stream nicht mehr abspielen kann (zumindest bleiben die Lautsprecher stumm).
Mein aktueller Testcode:
Spoiler anzeigen
(Die Funktion err() dient lediglich dazu, im Fehlerfall eine Meldung anzuzeigen.)
Lasse ich die Anweisungen
Woran liegt das, bzw. wie muss ich vorgehen, damit ich dennoch die Tonhöhe anpassen kann?
ich versuche, mit bass.net Musik vom Line-In Eingang des Computers über die Lautsprecher abzuspielen, und dabei den Pitch (Tonhöhe) der Musik zu verändern.
Problem dabei ist, dass zum Ändern der Tonhöhe das BASS_STREAM_DECODE-Flag gesetzt sein muss, wodurch ich offenbar den Stream nicht mehr abspielen kann (zumindest bleiben die Lautsprecher stumm).
Mein aktueller Testcode:
VB.NET-Quellcode
- Imports Un4seen.Bass
- Imports Un4seen.Bass.AddOn.Fx.BassFx
- Imports Un4seen.Bass.Bass
- Public Class Form1
- Const INDEV As Integer = 2 'Line In
- Const OUTDEV As Integer = 1 'Lautsprecher
- Dim hndInStream As Integer
- Dim hndOutStream As Integer
- Dim rp As New RECORDPROC(AddressOf recProc)
- Private Sub Form1_Load(sender As Object, e As EventArgs) Handles MyBase.Load
- printDevices()
- err(BASS_Init(OUTDEV, 44100, 0, Me.Handle), "BASS_Init")
- hndOutStream = err(BASS_StreamCreate(44100, 2, BASSFlag.BASS_STREAM_DECODE, BASSStreamProc.STREAMPROC_PUSH), "BASS_StreamCreate")
- hndOutStream = err(BASS_FX_TempoCreate(hndOutStream, 0), "BASS_FX_TempoCreate")
- err(BASS_ChannelSetAttribute(hndOutStream, BASSAttribute.BASS_ATTRIB_TEMPO_PITCH, 6), "BASS_ChannelSetAttribute")
- err(BASS_RecordInit(INDEV), "BASS_RecordInit")
- hndInStream = err(BASS_RecordStart(44100, 2, 0, 10, rp, IntPtr.Zero), "BASS_RecordStart")
- err(BASS_ChannelPlay(hndOutStream, False), "BASS_ChannelPlay")
- End Sub
- Function recProc(handle As Integer, buffer As System.IntPtr, length As Integer, user As System.IntPtr) As Boolean
- BASS_StreamPutData(hndOutStream, buffer, length)
- Return True
- End Function
- ...
Lasse ich die Anweisungen
BASS_FX_TempoCreate
sowie BASS_ChannelSetAttribute
weg und entferne ich das Flag BASSFlag.BASS_STREAM_DECODE
, kann ich problemlos die Musik des Line-In-Eingangs auf den Lautsprechern hören - nur kann ich dann logischerweise die Tonhöhe nicht anpassen.Woran liegt das, bzw. wie muss ich vorgehen, damit ich dennoch die Tonhöhe anpassen kann?