Pergunta

Como obter o controlador de volume de microfone no JMF?

Isso é o que eu tenho:

Eu tentei este conceito de implementação seu, mas continuo recebendo um nulo do primeiro processador de volume quando tento obter o fluxo, aqui está como eu faço:

// the device is the media device specifically audio
Processor processorForVolume = Manager.createProcessor(device.getLocator());

// wait until configured
ProcessorStates newState = new ProcessorStateListener(Processor.Configured).waitForProcessorState(processorForVolume);
System.out.println("volumeProcessorState: "+newState);

// setting the content descriptor to null - read in another thread this allows to get the gain control
processorForVolume.setContentDescriptor(null);

// set the track control format to one supported by the device and the track control.
// I didn't match it to an RTP allowed format, but I don't think this has anything to do with it...
TrackControl[] trackControls = processorForVolume.getTrackControls();
if (trackControls.length == 0)
    throw new MC_Exception("No track controls where found for this device:", new Object[]{device});
for (TrackControl control : trackControls)
    trackManipulator.manipulateTrackControls(control);

// wait until the processor is realized
newState = new ProcessorStateListener(Controller.Realized).waitForProcessorState(processorForVolume);
System.out.println("volumeProcessorState: "+newState);

// receives the gain control
micVolumeController = processorForVolume.getGainControl();

// cannot get the output stream to process further... any suggestions?
processor = Manager.createProcessor(processorForVolume.getDataOutput());
new ProcessorStateListener(Processor.Configured).waitForProcessorState(processor);
processor.setContentDescriptor(DeviceCapturingManager.RAW_RTP);
new ProcessorStateListener(Controller.Realized).waitForProcessorState(processor);

Esta é a saída que ele gera:

VolumeProcessorState: Formato configurado definido para rastrear o controle - com.sun.media.processengine$proctcontrol@1627c16: linear, 48000.0 Hz, 16 bits, estéreo, Littleendian, assinado VolumeProcessSorState: realizado

e a saída de dados do processador é nula.

Devo deixar claro que, quando o descritor de conteúdo! = NULL eu recebo um fluxo de saída, mas não o controlador de volume, e quando é nulo, recebo o controlador, mas sem fluxo.

Eu tento me conectar a um dispositivo de microfone de áudio

Adão.

Foi útil?

Solução

O microfone não possui um componente de volume! Deve implementar um você mesmo.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top