A Python utility that converts images to audio.
Go to file
John Beers aa69715206 Add requirements file 2023-09-01 12:57:26 -04:00
src Update key format references in README and main.py 2023-09-01 12:53:15 -04:00
.gitignore Initial commit 2023-01-15 16:43:19 +00:00
LICENSE Initial commit 2023-01-15 16:43:19 +00:00
README.md Update key format references in README and main.py 2023-09-01 12:53:15 -04:00
justfile Add justfile & isort profile 2023-08-25 13:35:38 +02:00
pyproject.toml Add justfile & isort profile 2023-08-25 13:35:38 +02:00
requirements.txt Add requirements file 2023-09-01 12:57:26 -04:00

README.md

image2sound

image2sound is a utility that accepts an image file, converts the RGB values of each pixel to a frequency, and saves the result to three separate WAV files.

NOTE: Large image files no longer automatically result in large audio files as the user can specify a target track length and sane defaults are applied when this is not specified.

Requirements

  • argparse
  • halo
  • math
  • mutagen
  • numpy
  • PIL
  • wavio

To run

Simply running python3 main.py will generate audio using the test image and default settings.

Arguments

The following optional arguments may be set, however:

  • -p for a path to an image
  • -o for path to save the output file to
  • -key for musical key (defaults to C )
  • -t for tempo (defaults to 60 bpm)
  • -min for the desired number of minutes (defaults to 1 so must be set to zero if shorter tracks are wanted)
  • -sec for the desired number of seconds (defaults to zero)

"Split" mode

Note that the default behavior of the utility is to create a single stereo audio file. Adding --split will split the resulting audio into three separate files (red, green, blue).

"Reveal" mode

Adding --reveal will override the key, tempo, and minutes/seconds with data derived from the image itself, "revealing" the music within the image

Examples

Example 1:

python3 main.py -p image.png -key D-minor -t 80 -min 11 -sec 38

Example 2:

python3 main.py -p image.png -key D-minor -t 80 -min 11 -sec 38 --split

Example 3:

python3 main.py -p image.png --reveal