Cool, thanks! I've now set up a virtual EC2 instance locally on my mac, and
complied fluidsynth, as you've suggested. I'm still having execution
issues, though when I try to call the subprocess to run fluidsynth on the
lambda as a subprocess of my python lambda function:

-ni: fluidsynth_exec/fluidsynth: /home/linuxbrew/.linuxbrew/lib/ld.so: bad
ELF interpreter: No such file or directory
[INFO] 2018-12-24T21:13:45.687Z caf3eeba-07c0-11e9-b529-973f6e240519 In
CatchAllExceptionHandler

[ERROR] 2018-12-24T21:13:45.687Z caf3eeba-07c0-11e9-b529-973f6e240519
Command '['fluidsynth_exec/fluidsynth', '-ni', 'fluidsynth_exec/sf.sf2',
'some_midi.mid', '-F', 'some_wav.wav', '-r', '44100']' returned non-zero
exit status 126.
Traceback (most recent call last):
File "/var/task/ask_sdk_runtime/dispatch.py", line 118, in dispatch
output = self.__dispatch_request(handler_input)
File "/var/task/ask_sdk_runtime/dispatch.py", line 183, in
__dispatch_request
handler_input=handler_input, handler=request_handler)
File "/var/task/ask_sdk_runtime/dispatch_components/request_components.py",
line 433, in execute
return handler.handle(handler_input)
File "/var/task/lambda_function.py", line 229, in handle
test_file = TestScript().test_script()
File "/var/task/test_script.py", line 151, in get_file
subprocess.check_call(fluidsynth_command, shell=True)
File "/var/lang/lib/python3.7/subprocess.py", line 341, in check_call
raise CalledProcessError(retcode, cmd)
subprocess.CalledProcessError: Command '['fluidsynth_exec/fluidsynth',
'-ni', 'fluidsynth_exec/sf.sf2', 'some_midi.mid', '-F', 'some_wav.wav',
'-r', '44100']' returned non-zero exit status 126.
END RequestId: caf3eeba-07c0-11e9-b529-973f6e240519


I think it's trying to use the file structure of my virtual machine I
compiled it on, based on the "bad ELF" line referring to: "
/home/linuxbrew/.linuxbrew/lib/ld.so". I used LinuxBrew to install the
dependencies for fluidsynth that you mentioned above (libsndfile, etc).
I tried copying the "ld.so" file over from the VM and sticking it in the
fluidsynth_exec folder, but that failed with the same error. I also
attempted to compile fluidsynth statically linked by running on the VM:

make SHARED=0 CC='gcc -static'

but using the executable made from this (in the src folder) failed as well
in the same way. I don't think that my attempt to compile the executable as
statically-linked actually did anything different, since the binary that
was produced was 53kb, just like the original.
Do you have any ideas what I could do differently? Unsure exactly why my
attempts have failed.
Thanks so much!
Justin


On Mon, Dec 24, 2018 at 4:53 AM Marcus Weseloh <mweselo...@gmail.com> wrote:

> Hi!
>
> The easiest might be to skip cross compiling and build it natively. So
> either on an AWS instance, or on a virtual machine on your Mac. On the VM,
> just install the built-essential libsndfile-dev, libglib-dev and cmake
> packages (or whatever they are called on the distro you are using), build
> it and then copy the compiled executive, libfluidsynth.so* and
> libsndfile.so* to your AWS.
>
> Cheers,
> Marcus
>
> Am Mo., 24. Dez. 2018, 06:54 hat Justin <justin2...@gmail.com>
> geschrieben:
>
>> Thanks for the quick reply! Installing the dependencies via homebrew
>> fixed my issue, and fluidsynth can now do the conversion for me locally!
>> However, I'm facing another issue now, which probably comes from the fact
>> that I compiled the code on my mac, and I'm trying to run it on AWS lambda
>> (which I think runs Amazon Linux):
>>
>> File "/var/lang/lib/python3.7/subprocess.py", line 1516, in _execute_child
>> raise child_exception_type(errno_num, err_msg, err_filename)
>> OSError: [Errno 8] Exec format error: 'fluidsynth_exec/fluidsynth'
>>
>> The (python) code which raises this error is as follows:
>>
>> fluidsynth_command = ['fluidsynth_exec/fluidsynth', '-ni',
>> tmp_sf2_file_name, tmp_mid_file_name, '-F', tmp_wav_file_name, '-r',
>> '44100']
>> subprocess.check_call(fluidsynth_command)
>>
>>
>> This code works locally for me, so I guess I need to cross-compile
>> fluidsynth to work on AWS lambda. Do you have any experience with this?
>> Unfortunately, most of the literature I'm finding on cmake and
>> cross-compilation seems really opaque, and I can't even find anything that
>> mentions how to make it work for Amazon Linux. I'm especially uncertain
>> about doing this cross compilation, since it'll need to rely on libsndfile,
>> which presumably is built for mac osx on my machine.
>> Thanks,
>> Justin
>>
>> On Sun, Dec 23, 2018 at 7:09 PM Marcus Weseloh <mar...@weseloh.cc> wrote:
>>
>>> Hi Justin,
>>>
>>> you probably compiled Fluidsynth without libsndfile support, so the
>>> resulting audio is a raw 16-bit signed dual-channel float audio file (so
>>> not a .wav file with proper headers). You can either convert this raw file
>>> to wav using some tool, or install libsndfile-dev (or whatever it's called
>>> in your distribution) before building fluidsynth.
>>>
>>> Cheers,
>>>
>>>     Marcus
>>>
>>> Am So., 23. Dez. 2018 um 23:34 Uhr schrieb Justin <justin2...@gmail.com
>>> >:
>>>
>>>> Hello, I'm trying to compile a fluidsynth binary. For my application, I
>>>> need a way to convert from midi to mp3 on an AWS lambda, and I thought that
>>>> using fluidsynth would be the best way. These are the steps I took:
>>>>
>>>>
>>>>    1. Clone fluidsynth from here:
>>>>    https://github.com/FluidSynth/fluidsynth
>>>>    2. Created build directory and ran 'cmake ..' from build directory
>>>>    3. Ran 'make fluidsynth' from build directory. This seemed to
>>>>    create a binary file called 'fluidsynth' in build/src directory
>>>>    4. Downloaded a sound font file from
>>>>    https://github.com/urish/cinto/blob/master/media/FluidR3%20GM.sf2
>>>>    (renamed to sf.sf2 for convenience
>>>>
>>>>
>>>> Running the binary gave the following output:
>>>>
>>>> > fluidsynth -ni sf.sf2 some_midi.mid -F output.wav -r 44100
>>>>
>>>> FluidSynth runtime version 2.0.2
>>>>
>>>> Copyright (C) 2000-2018 Peter Hanappe and others.
>>>>
>>>> Distributed under the LGPL license.
>>>>
>>>> SoundFont(R) is a registered trademark of E-mu Systems, Inc.
>>>>
>>>>
>>>>
>>>>
>>>> Rendering audio to file 'output.wav'..
>>>>
>>>>
>>>> However, when I tried to play the output.wav file that was generated,
>>>> it just gave a short loud click/pop.
>>>>
>>>>
>>>> I'm not sure what I'm doing wrong. Could someone give me some advice
>>>> for how to figure out how to get this working? Or is there a better way for
>>>> me to get fluidsynth to work on AWS lambda?
>>>>
>>>>
>>>> Thanks!
>>>>
>>>> Justin
>>>>
>>>>
>>>> _______________________________________________
>>>> fluid-dev mailing list
>>>> fluid-dev@nongnu.org
>>>> https://lists.nongnu.org/mailman/listinfo/fluid-dev
>>>>
>>> _______________________________________________
>>> fluid-dev mailing list
>>> fluid-dev@nongnu.org
>>> https://lists.nongnu.org/mailman/listinfo/fluid-dev
>>>
>> _______________________________________________
>> fluid-dev mailing list
>> fluid-dev@nongnu.org
>> https://lists.nongnu.org/mailman/listinfo/fluid-dev
>>
> _______________________________________________
> fluid-dev mailing list
> fluid-dev@nongnu.org
> https://lists.nongnu.org/mailman/listinfo/fluid-dev
>
_______________________________________________
fluid-dev mailing list
fluid-dev@nongnu.org
https://lists.nongnu.org/mailman/listinfo/fluid-dev

Reply via email to