<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
		<id>https://sound.bai-hua.org/index.php?action=history&amp;feed=atom&amp;title=ImageEncode-0.7</id>
		<title>ImageEncode-0.7 - Revision history</title>
		<link rel="self" type="application/atom+xml" href="https://sound.bai-hua.org/index.php?action=history&amp;feed=atom&amp;title=ImageEncode-0.7"/>
		<link rel="alternate" type="text/html" href="https://sound.bai-hua.org/index.php?title=ImageEncode-0.7&amp;action=history"/>
		<updated>2026-10-02T15:32:27Z</updated>
		<subtitle>Revision history for this page on the wiki</subtitle>
		<generator>MediaWiki 1.29.0</generator>

	<entry>
		<id>https://sound.bai-hua.org/index.php?title=ImageEncode-0.7&amp;diff=187&amp;oldid=prev</id>
		<title>Admin at 18:01, 8 February 2011</title>
		<link rel="alternate" type="text/html" href="https://sound.bai-hua.org/index.php?title=ImageEncode-0.7&amp;diff=187&amp;oldid=prev"/>
				<updated>2011-02-08T18:01:49Z</updated>
		
		<summary type="html">&lt;p&gt;&lt;/p&gt;
&lt;table class=&quot;diff diff-contentalign-left&quot; data-mw=&quot;interface&quot;&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;col class=&#039;diff-marker&#039; /&gt;
				&lt;col class=&#039;diff-content&#039; /&gt;
				&lt;tr style=&#039;vertical-align: top;&#039; lang=&#039;en&#039;&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;← Older revision&lt;/td&gt;
				&lt;td colspan=&#039;2&#039; style=&quot;background-color: white; color:black; text-align: center;&quot;&gt;Revision as of 18:01, 8 February 2011&lt;/td&gt;
				&lt;/tr&gt;&lt;tr&gt;&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot; id=&quot;mw-diff-left-l1&quot; &gt;Line 1:&lt;/td&gt;
&lt;td colspan=&quot;2&quot; class=&quot;diff-lineno&quot;&gt;Line 1:&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td colspan=&quot;2&quot;&gt;&amp;#160;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;+&lt;/td&gt;&lt;td style=&quot;color:black; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #a3d3ff; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&lt;ins style=&quot;font-weight: bold; text-decoration: none;&quot;&gt;http://www.ohmpie.com/imageencode/&lt;/ins&gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;tr&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/usr/bin/perl&lt;/div&gt;&lt;/td&gt;&lt;td class=&#039;diff-marker&#039;&gt;&amp;#160;&lt;/td&gt;&lt;td style=&quot;background-color: #f9f9f9; color: #333333; font-size: 88%; border-style: solid; border-width: 1px 1px 1px 4px; border-radius: 0.33em; border-color: #e6e6e6; vertical-align: top; white-space: pre-wrap;&quot;&gt;&lt;div&gt;#!/usr/bin/perl&lt;/div&gt;&lt;/td&gt;&lt;/tr&gt;
&lt;/table&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	<entry>
		<id>https://sound.bai-hua.org/index.php?title=ImageEncode-0.7&amp;diff=184&amp;oldid=prev</id>
		<title>Admin: Created page with &quot;&lt;pre&gt; #!/usr/bin/perl #Author: Evan Salazar #------------------------------------------ # #Convert bitmap image into audo file that #can be seen in a spectrogram # #-------------...&quot;</title>
		<link rel="alternate" type="text/html" href="https://sound.bai-hua.org/index.php?title=ImageEncode-0.7&amp;diff=184&amp;oldid=prev"/>
				<updated>2011-02-08T09:33:09Z</updated>
		
		<summary type="html">&lt;p&gt;Created page with &amp;quot;&amp;lt;pre&amp;gt; #!/usr/bin/perl #Author: Evan Salazar #------------------------------------------ # #Convert bitmap image into audo file that #can be seen in a spectrogram # #-------------...&amp;quot;&lt;/p&gt;
&lt;p&gt;&lt;b&gt;New page&lt;/b&gt;&lt;/p&gt;&lt;div&gt;&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#Author: Evan Salazar&lt;br /&gt;
#------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#Convert bitmap image into audo file that&lt;br /&gt;
#can be seen in a spectrogram&lt;br /&gt;
#&lt;br /&gt;
#------------------------------------------&lt;br /&gt;
use SimpleWave;&lt;br /&gt;
use POSIX;&lt;br /&gt;
use Math::Trig;&lt;br /&gt;
use Image::BMP;&lt;br /&gt;
use Getopt::Std;&lt;br /&gt;
use strict;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
################&lt;br /&gt;
#Constants used&lt;br /&gt;
################&lt;br /&gt;
#Version&lt;br /&gt;
my $version = 0.7;&lt;br /&gt;
&lt;br /&gt;
#low frequency &lt;br /&gt;
my $lowfreq = 200;&lt;br /&gt;
#high frequency:&lt;br /&gt;
my $highfreq = 20000;&lt;br /&gt;
#Sample rate for CD quality&lt;br /&gt;
#(The only frequency supported as of now)&lt;br /&gt;
my $samplerate = 44100;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Parse commadn line arguments&lt;br /&gt;
my ($input,$output,$pixelsecond,$highamp,$inverse) = parseArgs();&lt;br /&gt;
print &amp;quot;Input: $input \nOutput: $output \n&amp;quot;;&lt;br /&gt;
print &amp;quot;Pixel per second: $pixelsecond \nMax amplitude per sample: $highamp \n&amp;quot;;&lt;br /&gt;
print &amp;quot;Image color inverted\n&amp;quot; if ($inverse);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Open BMP&lt;br /&gt;
my $img = new Image::BMP(file=&amp;gt; $input);&lt;br /&gt;
&lt;br /&gt;
#Create file to write to&lt;br /&gt;
open(WAVEFILE, &amp;quot;&amp;gt;$output&amp;quot;);&lt;br /&gt;
&lt;br /&gt;
#Get width and height&lt;br /&gt;
my $width = $img-&amp;gt;{Width}; &lt;br /&gt;
my $height = $img-&amp;gt;{Height};&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;Image Width: $width Height: $height \n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#scale frequency per height;&lt;br /&gt;
my $freqrange = $highfreq-$lowfreq;&lt;br /&gt;
my $interval = $freqrange / $height;&lt;br /&gt;
print &amp;quot;Frequency Interval: $interval\n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
#Calculate samples per width pixel;&lt;br /&gt;
my $samplespixel =  POSIX::floor($samplerate / $pixelsecond);  &lt;br /&gt;
print &amp;quot;Samples per Pixel: $samplespixel \n&amp;quot;;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#This is the main algorithm&lt;br /&gt;
my @audioOut;&lt;br /&gt;
for (my $x=0;$x&amp;lt;$width;$x++) {&lt;br /&gt;
    #Calculate rows;&lt;br /&gt;
    my @audiorow;&lt;br /&gt;
    my $pos=0;&lt;br /&gt;
    for (my $y=0;$y&amp;lt;$height;$y++) {&lt;br /&gt;
    my $yinv = $height - $y - 1;&lt;br /&gt;
	#Get the amplitude&lt;br /&gt;
	my $amp =  color($img-&amp;gt;xy_rgb($x,$y));&lt;br /&gt;
	if($amp &amp;gt; 0) {&lt;br /&gt;
	    #Generate a sine wave &lt;br /&gt;
	    @audiorow[$pos++] = genSine( $yinv * $interval + $lowfreq ,$amp,$samplespixel,$samplerate);&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    #Add all the samples for the column &lt;br /&gt;
    for(my $i=0;$i&amp;lt;$samplespixel;$i++) {&lt;br /&gt;
	for(my $j=0;$j&amp;lt;@audiorow;$j++) {&lt;br /&gt;
	    @audioOut[$i + $x * $samplespixel] += $audiorow[$j]-&amp;gt;[$i];&lt;br /&gt;
	}&lt;br /&gt;
    }&lt;br /&gt;
    #My attempt to print the progress&lt;br /&gt;
    #my $done = POSIX::floor($x / ($width - 1) * 100);&lt;br /&gt;
    #print &amp;quot;$done &amp;quot;  if (($done % 10) == 0); &lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
print &amp;quot;\nGenerating wave file \n&amp;quot;;&lt;br /&gt;
#Write samples to wave file&lt;br /&gt;
print WAVEFILE SimpleWave::genWave(\@audioOut);&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#Generate a sine wave for the given &lt;br /&gt;
#frequency and amplitude &lt;br /&gt;
#&lt;br /&gt;
#(This functions could be faster by using &lt;br /&gt;
#a lookup table instead of calculating the&lt;br /&gt;
#wave every time)&lt;br /&gt;
#&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
sub genSine {&lt;br /&gt;
&lt;br /&gt;
    my ($frequency,$amplitude,$samples,$samplerate) = @_;&lt;br /&gt;
    my $cycles = $samples * $frequency / $samplerate;&lt;br /&gt;
    &lt;br /&gt;
    my @audioArray;&lt;br /&gt;
    for(my $i=0;$i&amp;lt;$samples;$i++)&lt;br /&gt;
    {&lt;br /&gt;
	my $x = sin($cycles * 2 * pi * $i / $samples) * $amplitude;&lt;br /&gt;
	$audioArray[$i] = POSIX::floor($x);&lt;br /&gt;
    }&lt;br /&gt;
&lt;br /&gt;
    return \@audioArray;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#Convert the RGB value to a amplitude&lt;br /&gt;
#&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
sub color {&lt;br /&gt;
    my ($r,$g,$b) = @_;&lt;br /&gt;
    my $total = $r + $g + $b;   &lt;br /&gt;
    #Invert the color if -I is set&lt;br /&gt;
    $total = 765 - $total if($inverse);&lt;br /&gt;
    my $amp = $total / 765 * $highamp;  &lt;br /&gt;
&lt;br /&gt;
    #Ignore all intensitys under 50&lt;br /&gt;
    if($amp &amp;gt; 50) {&lt;br /&gt;
	return $amp;&lt;br /&gt;
    }&lt;br /&gt;
    return 0;&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#Read arguments from the command line;&lt;br /&gt;
#&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
sub parseArgs {&lt;br /&gt;
&lt;br /&gt;
    #Default arguments&lt;br /&gt;
    my $pixelsecond = 15;&lt;br /&gt;
    my $highamp = 300;&lt;br /&gt;
    my $inverse = 0;&lt;br /&gt;
&lt;br /&gt;
    #Set options for reading&lt;br /&gt;
    my %args = ();&lt;br /&gt;
    getopts(&amp;quot;i:o:p:a:hI&amp;quot;,\%args);&lt;br /&gt;
&lt;br /&gt;
    help() if($args{h}); &lt;br /&gt;
    help(&amp;quot;Need input filename&amp;quot;) if(!$args{i}); &lt;br /&gt;
    help(&amp;quot;Need output filename&amp;quot;) if(!$args{o}); &lt;br /&gt;
    $pixelsecond = $args{p} if($args{p}); &lt;br /&gt;
    $highamp = $args{a} if($args{a}); &lt;br /&gt;
    $inverse = 1 if($args{I}); &lt;br /&gt;
&lt;br /&gt;
    return ($args{i},$args{o},$pixelsecond,$highamp,$inverse);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#Display help message for program&lt;br /&gt;
#&lt;br /&gt;
#-----------------------------------------&lt;br /&gt;
sub help {&lt;br /&gt;
&lt;br /&gt;
    my ($message) = @_;&lt;br /&gt;
    print &amp;lt;&amp;lt;EOF;&lt;br /&gt;
Image Encode Ver $version by Evan Salazar&lt;br /&gt;
Encode an bitmat to a wave that can be viewed &lt;br /&gt;
with a spectrogram&lt;br /&gt;
-----------------------------------------------------------------&lt;br /&gt;
Usage: imageEncode -i input.bmp -o output.wav&lt;br /&gt;
&lt;br /&gt;
  -i [File]	Input bitmap (Best use small BMP arround 100x150) &lt;br /&gt;
  -o [File]	Output wave (44.1khz 16bit mono)&lt;br /&gt;
  -p [int]	Pixels per Second (default: 10)&lt;br /&gt;
  -a [int]	Max amplitude per sample (default: 200) Max: 32000&lt;br /&gt;
  -I		Invert image color (Best for dark images)&lt;br /&gt;
  -h		Display this help message&lt;br /&gt;
-------------------------------------------------------------------&lt;br /&gt;
EOF&lt;br /&gt;
    print &amp;quot;Error: $message \n&amp;quot; if($message ne &amp;#039;&amp;#039;);&lt;br /&gt;
    exit(1);&lt;br /&gt;
}&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
SimpleWave.pm&lt;br /&gt;
&lt;br /&gt;
&amp;lt;pre&amp;gt;&lt;br /&gt;
#!/usr/bin/perl&lt;br /&gt;
#Author Evan Salazar&lt;br /&gt;
#--------------------------------------------&lt;br /&gt;
#&lt;br /&gt;
#Generate a .wav file for 16 bit mono PCM&lt;br /&gt;
#&lt;br /&gt;
#-------------------------------------------&lt;br /&gt;
use strict;&lt;br /&gt;
package SimpleWave;&lt;br /&gt;
&lt;br /&gt;
sub genWave {&lt;br /&gt;
&lt;br /&gt;
#Get the reference to the data array&lt;br /&gt;
&lt;br /&gt;
my ($audioData) = @_;&lt;br /&gt;
&lt;br /&gt;
#This is the default sample rate&lt;br /&gt;
my $samplerate = 44100;&lt;br /&gt;
my $bits = 16;&lt;br /&gt;
my $samples = $#{$audioData} + 1;&lt;br /&gt;
my $channels = 1;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
#Do Calculations for data wave headers&lt;br /&gt;
my $byterate = $samplerate * $channels * $bits / 8;&lt;br /&gt;
my $blockalign = $channels * $bits / 8;&lt;br /&gt;
my $filesize = $samples * ($bits/8) * $channels + 36;&lt;br /&gt;
&lt;br /&gt;
#RIFF Chunk;&lt;br /&gt;
my $riff = pack(&amp;#039;a4Va4&amp;#039;,&amp;#039;RIFF&amp;#039;,$filesize,&amp;#039;WAVE&amp;#039;);&lt;br /&gt;
&lt;br /&gt;
#Format Chunk&lt;br /&gt;
my $format = pack(&amp;#039;a4VvvVVvv&amp;#039;,&lt;br /&gt;
	    	&amp;#039;fmt &amp;#039;,&lt;br /&gt;
		16,1,&lt;br /&gt;
		$channels,&lt;br /&gt;
		$samplerate,&lt;br /&gt;
		$byterate,&lt;br /&gt;
		$blockalign,&lt;br /&gt;
		$bits);&lt;br /&gt;
&lt;br /&gt;
#Data Chunk&lt;br /&gt;
my $dataChunk = pack(&amp;#039;a4V&amp;#039;,&amp;#039;data&amp;#039;,$blockalign * $samples);&lt;br /&gt;
&lt;br /&gt;
#Read audoData array&lt;br /&gt;
my $data;&lt;br /&gt;
for(my $i=0;$i&amp;lt;$samples;$i++) {&lt;br /&gt;
    &lt;br /&gt;
    $data .= pack(&amp;#039;v&amp;#039;,$audioData-&amp;gt;[$i]);&lt;br /&gt;
}&lt;br /&gt;
&lt;br /&gt;
#Return a byte string of the wave&lt;br /&gt;
return $riff . $format . $dataChunk. $data;&lt;br /&gt;
}&lt;br /&gt;
1;&lt;br /&gt;
&amp;lt;/pre&amp;gt;&lt;/div&gt;</summary>
		<author><name>Admin</name></author>	</entry>

	</feed>