Comments (15)
Here are the dependencies:
- libkeyfinder
- boost (only at compile time)
- ffmpeg
That last dependency is kind of the tricky bit. ffmpeg
split a while back into two projects, the original ffmpeg
and a project known as libav
. Unfortunately Ubuntu 14.04 ships with libav
. You can read this StackOverflow answer to find out a little bit more about the spit.
The problem is, this project was written with ffmpeg
in mind, not libav
, so I can make no gaurentees to how this will build with libav
. According to the SO answer it should be possible to install (I'm not sure if that would be replacing or just installing along side) ffmpeg
on 14.04.
from keyfinder-cli.
Thank you for your reply. I was unable to compilie keyfinder-cli
in ubuntu 14.04, but due to the fact that I'm using Docker I try to compile your wrapper in 15.05 where the "real ffpmeg
" exists. Is there a chance that the wrapper compiles in 15.05?
from keyfinder-cli.
It might compile, but it will link against ffmpegs shared objects.
from keyfinder-cli.
Unfortunately, I was unable to compile the library. Compilation ends with:
root@23cdf49c4898:/data/keyfinder-cli# make
mkdir -p bin
g++ -std=c++11 -Wall -lkeyfinder -lboost_system -lm -lz -lavresample -lavformat -lavcodec -lavutil -o keyfinder-cli keyfinder_cli.cpp
/tmp/ccfzW8ZY.o: In function `fill_audio_data(char const*, KeyFinder::AudioData&)::{lambda()#1}::operator()() const':
keyfinder_cli.cpp:(.text+0xe5): undefined reference to `av_register_all'
/tmp/ccfzW8ZY.o: In function `fill_audio_data(char const*, KeyFinder::AudioData&)::{lambda(AVAudioResampleContext*)#2}::operator()(AVAudioResampleContext*) const':
keyfinder_cli.cpp:(.text+0x104): undefined reference to `avresample_free'
/tmp/ccfzW8ZY.o: In function `fill_audio_data(char const*, KeyFinder::AudioData&)':
keyfinder_cli.cpp:(.text+0x148): undefined reference to `avformat_alloc_context'
keyfinder_cli.cpp:(.text+0x16f): undefined reference to `avformat_open_input'
keyfinder_cli.cpp:(.text+0x1b5): undefined reference to `avformat_free_context'
keyfinder_cli.cpp:(.text+0x1d4): undefined reference to `avformat_find_stream_info'
keyfinder_cli.cpp:(.text+0x2ea): undefined reference to `avcodec_find_decoder'
keyfinder_cli.cpp:(.text+0x345): undefined reference to `avcodec_open2'
keyfinder_cli.cpp:(.text+0x37d): undefined reference to `avresample_alloc_context'
keyfinder_cli.cpp:(.text+0x3d8): undefined reference to `av_get_default_channel_layout'
keyfinder_cli.cpp:(.text+0x412): undefined reference to `av_opt_set_int'
keyfinder_cli.cpp:(.text+0x43b): undefined reference to `av_opt_set_int'
keyfinder_cli.cpp:(.text+0x465): undefined reference to `av_opt_set_int'
keyfinder_cli.cpp:(.text+0x483): undefined reference to `av_opt_set_int'
keyfinder_cli.cpp:(.text+0x4ac): undefined reference to `av_opt_set_int'
/tmp/ccfzW8ZY.o:keyfinder_cli.cpp:(.text+0x4d6): more undefined references to `av_opt_set_int' follow
/tmp/ccfzW8ZY.o: In function `fill_audio_data(char const*, KeyFinder::AudioData&)':
keyfinder_cli.cpp:(.text+0x4e5): undefined reference to `avresample_open'
keyfinder_cli.cpp:(.text+0x538): undefined reference to `KeyFinder::AudioData::setFrameRate(unsigned int)'
keyfinder_cli.cpp:(.text+0x558): undefined reference to `KeyFinder::AudioData::setChannels(unsigned int)'
keyfinder_cli.cpp:(.text+0x569): undefined reference to `av_frame_alloc'
keyfinder_cli.cpp:(.text+0x578): undefined reference to `av_free'
keyfinder_cli.cpp:(.text+0x65e): undefined reference to `avcodec_decode_audio4'
keyfinder_cli.cpp:(.text+0x718): undefined reference to `av_frame_alloc'
keyfinder_cli.cpp:(.text+0x727): undefined reference to `av_free'
keyfinder_cli.cpp:(.text+0x7dd): undefined reference to `avresample_convert_frame'
keyfinder_cli.cpp:(.text+0x885): undefined reference to `KeyFinder::AudioData::getSampleCount() const'
keyfinder_cli.cpp:(.text+0x8a2): undefined reference to `KeyFinder::AudioData::addToSampleCount(unsigned int)'
keyfinder_cli.cpp:(.text+0x8b1): undefined reference to `KeyFinder::AudioData::resetIterators()'
keyfinder_cli.cpp:(.text+0x8c8): undefined reference to `KeyFinder::AudioData::advanceWriteIterator(unsigned int)'
keyfinder_cli.cpp:(.text+0x917): undefined reference to `KeyFinder::AudioData::setSampleAtWriteIterator(double)'
keyfinder_cli.cpp:(.text+0x92b): undefined reference to `KeyFinder::AudioData::advanceWriteIterator(unsigned int)'
/tmp/ccfzW8ZY.o: In function `main':
keyfinder_cli.cpp:(.text+0xe11): undefined reference to `KeyFinder::AudioData::AudioData()'
keyfinder_cli.cpp:(.text+0xe28): undefined reference to `av_log_set_callback'
keyfinder_cli.cpp:(.text+0xe5a): undefined reference to `KeyFinder::KeyFinder::keyOfAudio(KeyFinder::AudioData const&)'
/tmp/ccfzW8ZY.o: In function `SafeAVPacket::SafeAVPacket()':
keyfinder_cli.cpp:(.text._ZN12SafeAVPacketC2Ev[_ZN12SafeAVPacketC5Ev]+0x14): undefined reference to `av_init_packet'
/tmp/ccfzW8ZY.o: In function `SafeAVPacket::~SafeAVPacket()':
keyfinder_cli.cpp:(.text._ZN12SafeAVPacketD2Ev[_ZN12SafeAVPacketD5Ev]+0x21): undefined reference to `av_free_packet'
/tmp/ccfzW8ZY.o: In function `SafeAVPacket::read(AVFormatContext*, int)':
keyfinder_cli.cpp:(.text._ZN12SafeAVPacket4readEP15AVFormatContexti[_ZN12SafeAVPacket4readEP15AVFormatContexti]+0x28): undefined reference to `av_free_packet'
keyfinder_cli.cpp:(.text._ZN12SafeAVPacket4readEP15AVFormatContexti[_ZN12SafeAVPacket4readEP15AVFormatContexti]+0x3b): undefined reference to `av_read_frame'
/tmp/ccfzW8ZY.o: In function `KeyFinder::KeyFinder::KeyFinder()':
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x15): undefined reference to `KeyFinder::LowPassFilterFactory::LowPassFilterFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x25): undefined reference to `KeyFinder::ChromaTransformFactory::ChromaTransformFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x35): undefined reference to `KeyFinder::TemporalWindowFactory::TemporalWindowFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x4a): undefined reference to `KeyFinder::ChromaTransformFactory::~ChromaTransformFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x5b): undefined reference to `KeyFinder::LowPassFilterFactory::~LowPassFilterFactory()'
/tmp/ccfzW8ZY.o: In function `KeyFinder::KeyFinder::~KeyFinder()':
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderD2Ev[_ZN9KeyFinder9KeyFinderD5Ev]+0x18): undefined reference to `KeyFinder::TemporalWindowFactory::~TemporalWindowFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderD2Ev[_ZN9KeyFinder9KeyFinderD5Ev]+0x28): undefined reference to `KeyFinder::ChromaTransformFactory::~ChromaTransformFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderD2Ev[_ZN9KeyFinder9KeyFinderD5Ev]+0x34): undefined reference to `KeyFinder::LowPassFilterFactory::~LowPassFilterFactory()'
collect2: error: ld returned 1 exit status
Makefile:4: recipe for target 'keyfinder-cli' failed
make: *** [keyfinder-cli] Error 1
from keyfinder-cli.
What version of ffmpeg
are you building against?
from keyfinder-cli.
root@23cdf49c4898:/data/keyfinder-cli# apt-cache show libavresample-dev | grep Version
Version: 7:2.7.2-1build1
root@23cdf49c4898:/data/keyfinder-cli# apt-cache show libavcodec-dev | grep Version
Version: 7:2.7.2-1build1
root@23cdf49c4898:/data/keyfinder-cli# apt-cache show libavutil-dev | grep Version
Version: 7:2.7.2-1build1
root@23cdf49c4898:/data/keyfinder-cli# apt-cache show libavformat-dev | grep Version
Version: 7:2.7.2-1build1
from keyfinder-cli.
Are you sure that's ffmpeg and not libav. The whole thing between them is really confusing to be honest.
The ffmpeg version I have on my machine is 1:2.7
from keyfinder-cli.
Yes, i'm sure - http://www.webupd8.org/2014/11/ffmpeg-returns-to-official-ubuntu.html
I've installed following packages:
apt-get install libavutil-ffmpeg-dev
apt-get install libavresample-ffmpeg-dev
apt-get install libavcodec-ffmpeg-dev
apt-get install libavformat-ffmpeg-dev
I use Ubuntu 15.10 from https://hub.docker.com/_/ubuntu/
from keyfinder-cli.
Little update: on fresh docker image i've compiled ffmpeg (followed by https://trac.ffmpeg.org/wiki/CompilationGuide/Ubuntu), but I'm still getting the following error.
root@0e5f2d7fbec2:~/keyfinder-cli# make
mkdir -p bin
g++ -std=c++11 -Wall -lkeyfinder -lboost_system -lavcodec -lavformat -lavutil -lavresample -o keyfinder-cli keyfinder_cli.cpp
/tmp/ccqlfYeL.o: In function `fill_audio_data(char const*, KeyFinder::AudioData&)::{lambda()#1}::operator()() const':
keyfinder_cli.cpp:(.text+0xe5): undefined reference to `av_register_all'
/tmp/ccqlfYeL.o: In function `fill_audio_data(char const*, KeyFinder::AudioData&)::{lambda(AVAudioResampleContext*)#2}::operator()(AVAudioResampleContext*) const':
keyfinder_cli.cpp:(.text+0x104): undefined reference to `avresample_free'
/tmp/ccqlfYeL.o: In function `fill_audio_data(char const*, KeyFinder::AudioData&)':
keyfinder_cli.cpp:(.text+0x148): undefined reference to `avformat_alloc_context'
keyfinder_cli.cpp:(.text+0x16f): undefined reference to `avformat_open_input'
keyfinder_cli.cpp:(.text+0x1b5): undefined reference to `avformat_free_context'
keyfinder_cli.cpp:(.text+0x1d4): undefined reference to `avformat_find_stream_info'
[...]
/tmp/ccqlfYeL.o: In function `KeyFinder::KeyFinder::KeyFinder()':
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x15): undefined reference to `KeyFinder::LowPassFilterFactory::LowPassFilterFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x25): undefined reference to `KeyFinder::ChromaTransformFactory::ChromaTransformFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x35): undefined reference to `KeyFinder::TemporalWindowFactory::TemporalWindowFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x4a): undefined reference to `KeyFinder::ChromaTransformFactory::~ChromaTransformFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderC2Ev[_ZN9KeyFinder9KeyFinderC5Ev]+0x5b): undefined reference to `KeyFinder::LowPassFilterFactory::~LowPassFilterFactory()'
/tmp/ccqlfYeL.o: In function `KeyFinder::KeyFinder::~KeyFinder()':
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderD2Ev[_ZN9KeyFinder9KeyFinderD5Ev]+0x18): undefined reference to `KeyFinder::TemporalWindowFactory::~TemporalWindowFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderD2Ev[_ZN9KeyFinder9KeyFinderD5Ev]+0x28): undefined reference to `KeyFinder::ChromaTransformFactory::~ChromaTransformFactory()'
keyfinder_cli.cpp:(.text._ZN9KeyFinder9KeyFinderD2Ev[_ZN9KeyFinder9KeyFinderD5Ev]+0x34): undefined reference to `KeyFinder::LowPassFilterFactory::~LowPassFilterFactory()'
collect2: error: ld returned 1 exit status
Makefile:4: recipe for target 'keyfinder-cli' failed
make: *** [keyfinder-cli] Error 1
ffmpeg:
root@0e5f2d7fbec2:~/keyfinder-cli# ffmpeg
ffmpeg version N-75077-g309fb6b Copyright (c) 2000-2015 the FFmpeg developers
built with gcc 5.2.1 (Ubuntu 5.2.1-16ubuntu1) 20150903
configuration: --prefix=/root/ffmpeg_build --pkg-config-flags=--static --extra-cflags=-I/root/ffmpeg_build/include --extra-ldflags=-L/root/ffmpeg_build/lib --bindir=/root/bin --enable-gpl --enable-libass --enable-libfreetype --enable-libmp3lame --enable-libopus --enable-libtheora --enable-libvorbis --enable-nonfree --enable-avresample
My g++ version:
root@0e5f2d7fbec2:~/keyfinder-cli# g++ --version
g++ (Ubuntu 5.2.1-16ubuntu1) 5.2.1 20150903
Any advices?
from keyfinder-cli.
I'll mess about with this in a docker instance right now and see what I can do :-)
from keyfinder-cli.
Thanks!
from keyfinder-cli.
TL;DR; I didn't actually see what I could do, oops
So I'm a little ashamed to say I actually hadn't even tried to build the project since you opened the issue a few weeks ago! Looks like @ibsh released a whole new version of libkeyfinder since I last built this tool! (Fingers crossed for more accurate key detection!)
There were some very minimal changes that need to be made for the project to successfully build, but I got a little side tracked fixing the ArchLinux AUR package for libkeyfinder and didn't have a chance to look into your particular build problem tonight.
from keyfinder-cli.
It has slightly more accurate key detection. =)
http://ibrahimshaath.co.uk/keyfinder/comparison.pdf
from keyfinder-cli.
@iammordaty While setting up TravisCI for this project I came across what I believe is the solution to your problem. It definitely stems from my inexperience with compiling C/++ code :-)
From what I can tell, there's a difference between what is available on Arch and Ubuntu in terms of static and dynamic libraries. On Arch Linux things appear to be dynamically linked, when compiling on Ubuntu, things seem to be statically linked. I haven't found exactly what i want to confirm this theory by googling around so what I just said might be completely wrong.. but the flag order definitely doesn't matter on Arch.
Anyway, I've pushed out a fix to the Makefile that should hopefully solve this problem! f90cd0e
Let me know if that fixes things!
PS: Sorry that it's taken me so long to look into this!
from keyfinder-cli.
@evanpurkhiser Yes, that was it! Thank you very much for your help!
root@3f1f77bfc4bf:/data/keyfinder-cli# make
g++ keyfinder_cli.cpp -std=c++11 -Wall -lkeyfinder -lavcodec -lavformat -lavutil -lavresample -o keyfinder-cli
root@3f1f77bfc4bf:/data/keyfinder-cli# make install
install -Dm 755 keyfinder-cli "/usr/local/bin/keyfinder-cli"
install -Dm 644 keyfinder-cli.1 "/usr/local/share/man/man1/keyfinder-cli.1"
root@3f1f77bfc4bf:/data/keyfinder-cli# keyfinder_cli file.mp3
D
root@3f1f77bfc4bf:/data/keyfinder-cli#
from keyfinder-cli.
Related Issues (13)
- Mention "make install" in ReadMe HOT 1
- Switch to libswresample
- Unable to decode packet HOT 10
- DIfferent key output running keyfinder-cli VS binary app HOT 4
- fatal error: keyfinder/keyfinder.h: No such file or directory HOT 7
- fatal error: 'libavutil/avutil.h' file not found HOT 9
- Ubuntu 14.04.1 build problem HOT 3
- Compiling in OSX HOT 5
- keyfinder.h, constants.h? HOT 5
- Add TravisCI build test HOT 1
- Cannot find keyfinder library on OSX using make HOT 6
- Release keyfinder-cli HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from keyfinder-cli.