Audioop error not a whole number of frames

1 vote and 2 comments so far on Reddit

Hi!

So, we try to control the speed (pwm) of a DC motor with a mic input using python 3 on a raspberry pi 2 model b. The code is running fine except this error that appears randomly.

The error occurs in line 36 (*inputMax = audioop.max(data,2)100/32768) where we make a %-value for the pwm control

This is the Code:

import alsaaudio, time, audioop
import RPi.GPIO as GPIO

#from RPIO import PWM

GPIO.setmode(GPIO.BOARD)

# Pulsewith
GPIO.setup(7,GPIO.OUT)
# Input H1 
GPIO.setup(11,GPIO.OUT)
# Input H2
GPIO.setup(13,GPIO.OUT)
pwm = GPIO.PWM(7,100)

GPIO.output(7,GPIO.HIGH)

 

input =  alsaaudio.PCM(alsaaudio.PCM_CAPTURE,alsaaudio.PCM_NONBLOCK)

input.setchannels(1)
input.setrate(8000)
input.setformat(alsaaudio.PCM_FORMAT_S16_LE)

input.setperiodsize(160)

GPIO.output(11,GPIO.LOW)
GPIO.output(13,GPIO.HIGH)

while True:
    l,data = input.read()
    if l:
        
        inputMax = audioop.max(data,2)*100/32768
        if inputMax <= 20:
            print("zu leise")
            pwm.start(0)
        else:
            print (audioop.max(data, 2))
            pwm.start(inputMax)
    time.sleep(.001)
        
#GPIO.cleanup()

any clues?

thank you :)

I’m trying to get a simple microphone volume trigger going.

But I keep getting an error when I try to introduce ANY time delays beyond .001.

Can anyone figure this out?

The current code I’m using, based from other examples found around the net:

Code: Select all

#!/usr/bin/python

import alsaaudio, time, audioop

inp = alsaaudio.PCM(alsaaudio.PCM_CAPTURE, alsaaudio.PCM_NONBLOCK, 'Microphone')

# Set attributes: Mono, 8000 Hz, 16 bit little endian samples
inp.setchannels(1)
inp.setrate(8000)
inp.setformat(alsaaudio.PCM_FORMAT_S16_LE)

inp.setperiodsize(160)

x = 1
volMAX = 0

while True:
    
    # Read data from device
    l,data = inp.read()
    if l:
        # Return the maximum of the absolute value of all samples in a fragment.
        volMAX = audioop.max(data, 2)
        print volMAX

    time.sleep(.001)
    
    if volMAX > 149:
        print("Limit reached.")
        #time.sleep(5)
    

This code will run fine, until I try to stop and do something else after the limit is reached. For example uncommenting time.sleep(5)
Then I get this error:

volMAX = audioop.max(data, 2)
audioop.error: not a whole number of frames

I want to do other things (pause, light a LED, etc) for a while when the limit is reached, and then go back to watching the microphone for the next trigger event.

Thank you for any help : )

Recommend Projects

  • React photo

    React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo

    Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo

    Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo

    TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo

    Django

    The Web framework for perfectionists with deadlines.

  • Laravel photo

    Laravel

    A PHP framework for web artisans

  • D3 photo

    D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Visualization

    Some thing interesting about visualization, use data art

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo

    Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo

    Microsoft

    Open source projects and samples from Microsoft.

  • Google photo

    Google

    Google ❤️ Open Source for everyone.

  • Alibaba photo

    Alibaba

    Alibaba Open Source for everyone

  • D3 photo

    D3

    Data-Driven Documents codes.

  • Tencent photo

    Tencent

    China tencent open source team.

github jiaaro / pydub / pydub / pyaudioop.py View on Github external
def findfit(cp1, cp2):
    size = 2

    if len(cp1) % 2 != 0 or len(cp2) % 2 != 0:
        raise error("Strings should be even-sized")

    if len(cp1) < len(cp2):
        raise error("First sample should be longer")

    len1 = _sample_count(cp1, size)
    len2 = _sample_count(cp2, size)

    sum_ri_2 = _sum2(cp2, cp2, len2)
    sum_aij_2 = _sum2(cp1, cp1, len2)
    sum_aij_ri = _sum2(cp1, cp2, len2)

    result = (sum_ri_2 * sum_aij_2 - sum_aij_ri * sum_aij_ri) / sum_aij_2

    best_result = result
    best_i = 0

    for i in range(1, len1 - len2 + 1):
        aj_m1 = _get_sample(cp1, size, i - 1)
        aj_lm1 = _get_sample(cp1, size, i + len2 - 1)
github jiaaro / pydub / pydub / pyaudioop.py View on Github external
def ratecv(cp, size, nchannels, inrate, outrate, state, weightA=1, weightB=0):
    _check_params(len(cp), size)
    if nchannels < 1:
        raise error("# of channels should be >= 1")

    bytes_per_frame = size * nchannels
    frame_count = len(cp) / bytes_per_frame

    if bytes_per_frame / nchannels != size:
        raise OverflowError("width * nchannels too big for a C int")

    if weightA < 1 or weightB < 0:
        raise error("weightA should be >= 1, weightB should be >= 0")

    if len(cp) % bytes_per_frame != 0:
        raise error("not a whole number of frames")

    if inrate <= 0 or outrate <= 0:
        raise error("sampling rate not > 0")

    d = gcd(inrate, outrate)
    inrate /= d
    outrate /= d

    prev_i = [0] * nchannels
    cur_i = [0] * nchannels

    if state is None:
        d = -outrate
    else:
        d, samps = state
github jiaaro / pydub / pydub / pyaudioop.py View on Github external
def ratecv(cp, size, nchannels, inrate, outrate, state, weightA=1, weightB=0):
    _check_params(len(cp), size)
    if nchannels < 1:
        raise error("# of channels should be >= 1")

    bytes_per_frame = size * nchannels
    frame_count = len(cp) / bytes_per_frame

    if bytes_per_frame / nchannels != size:
        raise OverflowError("width * nchannels too big for a C int")

    if weightA < 1 or weightB < 0:
        raise error("weightA should be >= 1, weightB should be >= 0")

    if len(cp) % bytes_per_frame != 0:
        raise error("not a whole number of frames")

    if inrate <= 0 or outrate <= 0:
        raise error("sampling rate not > 0")

    d = gcd(inrate, outrate)
    inrate /= d
    outrate /= d

    prev_i = [0] * nchannels
    cur_i = [0] * nchannels

    if state is None:
        d = -outrate

Понравилась статья? Поделить с друзьями:
  • Atom smasher error message
  • Atom php error
  • Atom install package error
  • Atmosphere error code 2162 0002
  • Atmega chip enable program error