Bird
Raised Fist0
SciPydata~10 mins

WAV audio file handling in SciPy - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - WAV audio file handling
Import scipy.io.wavfile
Read WAV file with read()
Get sample rate and data array
Process or analyze data
Write data back with write()
Save new WAV file
This flow shows how to read a WAV file, get its sample rate and data, optionally process it, and then save it back.
Execution Sample
SciPy
from scipy.io import wavfile
sample_rate, data = wavfile.read('input.wav')
print(sample_rate, data.shape)
wavfile.write('output.wav', sample_rate, data)
Reads a WAV file, prints sample rate and data shape, then writes the same data to a new file.
Execution Table
StepActionResultData Type/Value
1Import wavfile from scipy.ioModule readywavfile module
2Read 'input.wav' using wavfile.read()Returns sample rate and data arraysample_rate=44100, data=array(shape=(441000,))
3Print sample_rate and data.shapeOutputs sample rate and data shape44100 (441000,)
4Write data to 'output.wav' with wavfile.write()File saved with same sample rate and dataoutput.wav created
5End of scriptProcess completeNo errors
💡 All steps executed successfully; WAV file read and written.
Variable Tracker
VariableStartAfter Step 2After Step 3After Step 4Final
sample_rateundefined44100441004410044100
dataundefinedarray(shape=(441000,))array(shape=(441000,))array(shape=(441000,))array(shape=(441000,))
Key Moments - 3 Insights
Why do we get two outputs from wavfile.read()?
wavfile.read() returns the sample rate (how many samples per second) and the data array (the actual sound samples). See execution_table step 2.
What does the data array shape mean?
The shape shows how many samples and channels the audio has. For example, (441000,) means 441000 samples in one channel (mono). See variable_tracker for data shape.
Can we write the data back without changes?
Yes, wavfile.write() saves the data with the given sample rate. This is shown in execution_table step 4.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution table, what is the sample rate after reading the WAV file?
A22050
B48000
C44100
DNone
💡 Hint
Check execution_table row 2 under 'Data Type/Value' for sample_rate.
At which step is the WAV file data shape printed?
AStep 1
BStep 3
CStep 2
DStep 4
💡 Hint
Look at execution_table rows and find where print happens.
If the data array had shape (441000, 2), what would that mean?
AStereo audio with 441000 samples per channel
BMono audio with 441000 samples
CAudio with 2 samples total
DSample rate is 2 Hz
💡 Hint
Refer to key_moments about data array shape meaning.
Concept Snapshot
Use scipy.io.wavfile to read and write WAV files.
read() returns sample rate and data array.
Data array shape shows samples and channels.
write() saves data with sample rate.
Useful for audio processing and analysis.
Full Transcript
This lesson shows how to handle WAV audio files using scipy.io.wavfile in Python. First, import wavfile. Then read a WAV file with wavfile.read(), which gives you the sample rate and the audio data array. The sample rate tells how many samples per second the audio has. The data array contains the sound samples, and its shape tells you how many samples and channels are present. You can print these values to understand the audio file. Finally, you can write the audio data back to a new WAV file using wavfile.write(), keeping the same sample rate and data. This process is useful for audio analysis and processing tasks.

Practice

(1/5)
1. What does the function scipy.io.wavfile.read return when you load a WAV audio file?
easy
A. The file size and duration
B. Only the audio data as a list
C. The sample rate and the audio data as a NumPy array
D. The audio format and bit depth

Solution

  1. Step 1: Understand the function purpose

    scipy.io.wavfile.read is designed to load WAV files and extract audio information.
  2. Step 2: Identify the returned values

    It returns two things: the sample rate (how many samples per second) and the audio data as a NumPy array.
  3. Final Answer:

    The sample rate and the audio data as a NumPy array -> Option C
  4. Quick Check:

    read() returns (rate, data) [OK]
Hint: Remember read() gives rate and data array [OK]
Common Mistakes:
  • Thinking it returns only audio data
  • Confusing sample rate with file size
  • Expecting metadata like format or bit depth
2. Which of the following is the correct way to import the WAV file reading function from scipy?
easy
A. from scipy.io import wavfile
B. import scipy.wavfile.read
C. from scipy import wavfile.read
D. import wavfile from scipy.io

Solution

  1. Step 1: Recall correct import syntax

    Python imports use 'from module import function_or_submodule' format.
  2. Step 2: Match with scipy structure

    The correct way is to import the wavfile submodule from scipy.io as from scipy.io import wavfile.
  3. Final Answer:

    from scipy.io import wavfile -> Option A
  4. Quick Check:

    Correct import syntax = from scipy.io import wavfile [OK]
Hint: Use 'from scipy.io import wavfile' to access read/write [OK]
Common Mistakes:
  • Trying to import read directly
  • Using dot notation incorrectly in import
  • Swapping import order
3. What will be the output shape of the data array when you read a stereo WAV file with 44100 samples per channel using scipy.io.wavfile.read?
medium
A. (88200,)
B. (44100, 2)
C. (44100,)
D. (2, 44100)

Solution

  1. Step 1: Understand stereo audio data shape

    Stereo audio has two channels, so data shape is (samples, channels).
  2. Step 2: Calculate shape for 44100 samples

    With 44100 samples per channel and 2 channels, shape is (44100, 2).
  3. Final Answer:

    (44100, 2) -> Option B
  4. Quick Check:

    Stereo shape = (samples, 2) [OK]
Hint: Stereo data shape is (samples, 2) always [OK]
Common Mistakes:
  • Confusing channels and samples order
  • Assuming shape is (2, samples)
  • Thinking stereo data is flattened
4. You try to save a NumPy array with float values using scipy.io.wavfile.write but get an error. What is the likely cause?
medium
A. The file path is incorrect
B. The sample rate is missing
C. The array shape is (samples, 2) instead of (2, samples)
D. The array must be integer type, not float

Solution

  1. Step 1: Check data type requirements for write()

    scipy.io.wavfile.write expects integer arrays (e.g., int16) for audio data.
  2. Step 2: Identify error cause

    Using float arrays causes errors because WAV format stores integers, so conversion is needed.
  3. Final Answer:

    The array must be integer type, not float -> Option D
  4. Quick Check:

    write() needs int arrays [OK]
Hint: Convert floats to int before writing WAV [OK]
Common Mistakes:
  • Ignoring data type and writing floats directly
  • Forgetting sample rate argument
  • Misunderstanding array shape requirements
5. You want to double the speed of a WAV audio file using scipy.io.wavfile. Which approach correctly achieves this?
hard
A. Double the sample rate value and write the original data unchanged
B. Read the file, then write only every second sample to a new file
C. Halve the sample rate value and write the original data unchanged
D. Reverse the audio data array and write it with the original sample rate

Solution

  1. Step 1: Understand speed and sample rate relation

    Speed changes by adjusting sample rate: doubling sample rate doubles playback speed.
  2. Step 2: Apply correct method

    Keep audio data unchanged but write with double the original sample rate to speed up playback.
  3. Final Answer:

    Double the sample rate value and write the original data unchanged -> Option A
  4. Quick Check:

    Speed ∝ sample rate, double rate doubles speed [OK]
Hint: Change sample rate to speed up audio, not data length [OK]
Common Mistakes:
  • Skipping samples instead of changing sample rate
  • Halving sample rate to speed up (actually slows down)
  • Reversing data does not change speed