Skip to content

playing audio generate noise... #773

@MenGuangwen0411

Description

@MenGuangwen0411

I use pyav on win10 as:

from future import print_function
from PyQt5.QtMultimedia import *
import time
import av

container = av.open(r'd:\king.mp4')
stream = next(s for s in container.streams if s.type == 'audio')

fifo = av.AudioFifo()
resampler = av.AudioResampler(
format=av.AudioFormat('s16').packed,
layout='stereo',
rate=48000,
)

qformat = QAudioFormat()
qformat.setByteOrder(QAudioFormat.LittleEndian)
qformat.setChannelCount(2)
qformat.setCodec('audio/pcm')
qformat.setSampleRate(48000)
qformat.setSampleSize(16)
qformat.setSampleType(QAudioFormat.SignedInt)

output = QAudioOutput(qformat)
output.setBufferSize(16 * 48000)

device = output.start()

print(qformat, output, device)

def decode_iter():
try:
for pi, packet in enumerate(container.demux(stream)):
for fi, frame in enumerate(packet.decode()):
yield pi, fi, frame
except:
return

for pi, fi, frame in decode_iter():

frame = resampler.resample(frame)
print(pi, fi, frame, output.state())

bytes_buffered = output.bufferSize() - output.bytesFree()
us_processed = output.processedUSecs()
us_buffered = 1000000 * bytes_buffered / (2 * 16 / 8) / 48000
print('pts: %.3f, played: %.3f, buffered: %.3f' % (frame.time or 0, us_processed / 1000000.0, us_buffered / 1000000.0))


data = frame.planes[0].to_bytes()
while data:
    written = device.write(data)
    if written:
        # print 'wrote', written
        data = data[written:]
    else:
        # print 'did not accept data; sleeping'
        time.sleep(0.033)

if False and pi % 100 == 0:
    output.reset()
    print(output.state(), output.error())
    device = output.start()

# time.sleep(0.05)

while output.state() == QAudio.ActiveState:
time.sleep(0.1)

It works but the sound is very noisy, although hearable, how to deal with the noise?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions