Skip to main content

Notice

Please note that most of the software linked on this forum is likely to be safe to use. If you are unsure, feel free to ask in the relevant topics, or send a private message to an administrator or moderator. To help curb the problems of false positives, or in the event that you do find actual malware, you can contribute through the article linked here.
Topic: fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2 (Read 114185 times) previous topic - next topic
0 Members and 1 Guest are viewing this topic.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #25
I am sorry, but where are compiled binaries? I don't really want to compile the code myself.


The main reason for not providing the binaries is that MP3 is not free and you have to pay for it. See here.



fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #28
Why not Vorbis (or even better Theora) then ?

I'm thinking of making Theora multicore-capable but have not decided yet. Other projects are also very interesting, e.g. FLAC.

You should know that I'm neither an audio nor an video codec developer. And to be honest, my knowledge about MP3 is very poor.

What I wanted to show with these case studies was how algorithms can be parallelized even if everybody thinks it's too difficult or impossible. MP3 encoding was a good example for this... so I took that.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #29
Any chance getting a compile to rarewares?

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #30
Hi again,

meanwhile, I've added ID3 tagging support to fpMP3Enc to make it usable for frontends. If there's something missing, please let me know.

I was also able to make the "vbr-new" algorithm even faster: Running with 3 threads on my quad-core system the speedup was 2.59x compared to LAME and 2.75x to single-threaded fpMP3Enc which gives a 3-core efficiency of 92%.

If you download the file, you will find another sample application inside, called "fpStream", which in my eyes is the next level of multicore stream processing:

While fpMP3Enc is "single/multi file -> single encoding", fpStream is "single/multi file -> single/multi encoding". This means you can take one or more input files and perform one or more encodings on each of them.

For example, you can take one WAV file and encode one CBR MP3 and one VBR MP3 file.

I've also added Vorbis support which is in initial state because you cannot set any parameters. You will need x64 versions of libogg.dll and libvorbis.dll to use it.

fpStream is the framework that is responsible for CPU, memory and disk usage. The actual stream processing is done in the plugins, provided by me or by others. Unfortunately, the code is not well documented.

Next, I will add some parameters for Vorbis encoding and implement a plugin for FLAC encoding and decoding.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #31
Anyone who has compiled this encoder that could send it to me? I have zero knowledge about compiling and therefore I can't do it myself and instead I ask. I use x64 Win7 if that helps. Regards

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #32
Anyone who has compiled this encoder that could send it to me? I have zero knowledge about compiling and therefore I can't do it myself and instead I ask. I use x64 Win7 if that helps. Regards


I asked Roberto from RareWares if he can put the binaries on his site.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #33
I asked Roberto from RareWares if he can put the binaries on his site.

Good news. The binaries will be available for download soon.

With the initial version of the FLAC plugin it's possible to batch-convert FLAC files (44.1kHz/2ch/16bit) directly to MP3.

The command-line for FLAC to MP3 VBR is:

FPSTREAM filemask *.flac ( readfile flac*i -f "*fp" + flacdec fdec*i -s flac*i + fpmp3enc menc*i -s fdec*i --vbr-new + fpwritemp3file mp3*i -s menc*i -f "*n.mp3" )

You can also add another MP3 encoding task by extending the command line before the ')':

+ fpmp3enc <an ID1>*i -s fdec*i [MP3 options] + fpwritemp3file <an ID2>*i -s <an ID1>*i -f <file name>

Performance is quite good...


fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #35
Any chance in a GUI frontend? I'm interested in using this, and I think it will fill a gap in the market.

Vorbis/FLAC/MP3 should be the top priority!

Cheers,
Signature

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #36
The figures thrown around here are fantastic. Many thanks to George for reviving LAME development with regards to speed.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #37
Any chance in a GUI frontend? I'm interested in using this, and I think it will fill a gap in the market.

Yes, but it will take some time.

Quote
Vorbis/FLAC/MP3 should be the top priority!

Yes, I have already planned full support for these formats in 2009.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #38
Any chance in a GUI frontend? I'm interested in using this, and I think it will fill a gap in the market.

Vorbis/FLAC/MP3 should be the top priority!

Cheers,

A GUI would be awesome. Would be enough with a version that allows us (me at least) to write the normal lame switches and translates to the switches that are being used here instead.

Best Regards

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #39
Any chance in a GUI frontend? I'm interested in using this, and I think it will fill a gap in the market.

Yes, but it will take some time.

Quote
Vorbis/FLAC/MP3 should be the top priority!

Yes, I have already planned full support for these formats in 2009.


Awesome! If your encoder is cross-platform I'd highly recommend GTK+ for GUI development.

I'll be sure to donate to the project as a way of saying thanks when the time comes.

Cheers,
Signature

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #40
Awesome! If your encoder is cross-platform I'd highly recommend GTK+ for GUI development.

Right now, the encoder supports only Windows OSes (recommended Vista x64, 7 x64) so I will probably use the .NET/WPF framework for the GUI. But Linux (x64) support is planned for Q1/2010.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #41
Have you thought about using .net/mono with gtk#? Will save you time when porting to linux.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #42
Any plans to support STDIN/STDOUT?

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #43
Have you thought about using .net/mono with gtk#? Will save you time when porting to linux.


That will not work because I want to use "Blend" for designing the GUI, for self-education.


 

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #45
C2Q, 32 bit encoder, 32 bit windows 7, i know it says not supported... but:

Code: [Select]
Problem signature:
  Problem Event Name:    APPCRASH
  Application Name:    fpMP3Enc.exe
  Application Version:    0.0.0.0
  Application Timestamp:    4ae7fca8
  Fault Module Name:    fpMP3Enc.exe
  Fault Module Version:    0.0.0.0
  Fault Module Timestamp:    4ae7fca8
  Exception Code:    c0000005
  Exception Offset:    00016a50
  OS Version:    6.1.7600.2.0.0.256.48
  Locale ID:    1050
  Additional Information 1:    7dbb
  Additional Information 2:    7dbb9888de14eff1acc0059d88e00f09
  Additional Information 3:    2a64
  Additional Information 4:    2a64067aa8f6e15f007b8e41b2bd4c3e


It worked at home on C2D processor, the same OS, even from the same installation media
Error 404; signature server not available.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #46
C2Q, 32 bit encoder, 32 bit windows 7, i know it says not supported... but:
...
It worked at home on C2D processor, the same OS, even from the same installation media

From my initial post:

Quote
- Win32 version: The total WAV file size sum must not exceed 400MiB.

Maybe this was the problem?

The reason why 32-bit is not supported is that the application reserves a lot of virtual memory and often exceeds the 2 GiB limit for 32-bit.

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #47
It worked at home on C2D processor, the same OS, even from the same installation media

It didn't work on my Win7 32 bits on Intel C2D with wav files of about 40MBytes, an mp3 file of 0 Bytes is created.

Code: [Select]
Faulting application name: fpMP3Enc.exe, version: 0.0.0.0, time stamp: 0x4ae7fca8
Faulting module name: fpMP3Enc.exe, version: 0.0.0.0, time stamp: 0x4ae7fca8
Exception code: 0xc000001d
Fault offset: 0x0000bfe7
Faulting process id: 0x120c
Faulting application start time: 0x01ca5c677d812eb7
Faulting application path: F:\Progs\fpMP3Enc\x86 (not supported)\fpMP3Enc.exe
Faulting module path: F:\Progs\fpMP3Enc\x86 (not supported)\fpMP3Enc.exe
Report Id: bc443a97-c85a-11de-bb11-000ea6f7d2d1

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #48
Exception code: 0xc000001d

Now I see: The binary was compiled with SSE4 support but C2D's (except "Wolfdale") don't support this instruction set.

I will think about a solution.

People who have VS2008 installed can solve this problem by building the project without SSE4 support (see "#define USE_SSE4" in stdafx.h).

fpMP3Enc: a multi-core MP3 encoder based upon LAME 3.98.2

Reply #49
From my initial post:
Quote
- Win32 version: The total WAV file size sum must not exceed 400MiB.

Maybe this was the problem?
The reason why 32-bit is not supported is that the application reserves a lot of virtual memory and often exceeds the 2 GiB limit for 32-bit.


Yep, that is the problem - the file was 500+ megs. OK. Too bad it doesn't work with bigger wav files - well, the option is to encode tracks instead images
Error 404; signature server not available.