python - __init__() 应该为使用 boost_python 的 python 模块返回 None,而不是“NoneType”
问题描述
我正在使用python3并[Renderman][1]
自己编译。
这个库正在使用boost_python
which make python library by cpp。
test.py
import librenderman as rm
engine = rm.RenderEngine(44100,512,512)
我有这样的错误
$python test.py
JUCE v5.2.0
Traceback (most recent call last):
File "test.py", line 3, in <module>
engine = rm.RenderEngine(44100,512,512)
TypeError: __init__() should return None, not 'NoneType'
我四处搜索,发现这是因为 python 2/3 的差异。
然后检查链接库
$otool -L librenderman.so
librenderman.so:
/usr/local/lib/librenderman.so.dylib (compatibility version 1.0.0, current version 1.0.0)
@rpath/libpython3.7m.dylib (compatibility version 3.7.0, current version 3.7.0)
@rpath/libboost_python37.dylib (compatibility version 0.0.0, current version 0.0.0)
/System/Library/Frameworks/AudioUnit.framework/Versions/A/AudioUnit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Accelerate.framework/Versions/A/Accelerate (compatibility version 1.0.0, current version 4.0.0)
/System/Library/Frameworks/AudioToolbox.framework/Versions/A/AudioToolbox (compatibility version 1.0.0, current version 1000.0.0)
/System/Library/Frameworks/AVFoundation.framework/Versions/A/AVFoundation (compatibility version 1.0.0, current version 2.0.0)
/System/Library/Frameworks/AVKit.framework/Versions/A/AVKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Carbon.framework/Versions/A/Carbon (compatibility version 2.0.0, current version 164.0.0)
/System/Library/Frameworks/Cocoa.framework/Versions/A/Cocoa (compatibility version 1.0.0, current version 23.0.0)
/System/Library/Frameworks/CoreAudio.framework/Versions/A/CoreAudio (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/CoreAudioKit.framework/Versions/A/CoreAudioKit (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/CoreMedia.framework/Versions/A/CoreMedia (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/CoreMIDI.framework/Versions/A/CoreMIDI (compatibility version 1.0.0, current version 69.0.0)
/System/Library/Frameworks/IOKit.framework/Versions/A/IOKit (compatibility version 1.0.0, current version 275.0.0)
/System/Library/Frameworks/OpenGL.framework/Versions/A/OpenGL (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/QuartzCore.framework/Versions/A/QuartzCore (compatibility version 1.2.0, current version 1.11.0)
/System/Library/Frameworks/WebKit.framework/Versions/A/WebKit (compatibility version 1.0.0, current version 610.3.7)
@rpath/libc++.1.dylib (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libSystem.B.dylib (compatibility version 1.0.0, current version 1292.60.1)
/System/Library/Frameworks/AppKit.framework/Versions/C/AppKit (compatibility version 45.0.0, current version 2022.20.117)
/System/Library/Frameworks/ApplicationServices.framework/Versions/A/ApplicationServices (compatibility version 1.0.0, current version 54.0.0)
/System/Library/Frameworks/CoreFoundation.framework/Versions/A/CoreFoundation (compatibility version 150.0.0, current version 1770.255.0)
/System/Library/Frameworks/CoreGraphics.framework/Versions/A/CoreGraphics (compatibility version 64.0.0, current version 1463.2.1)
/System/Library/Frameworks/CoreServices.framework/Versions/A/CoreServices (compatibility version 1.0.0, current version 1122.11.0)
/System/Library/Frameworks/CoreText.framework/Versions/A/CoreText (compatibility version 1.0.0, current version 1.0.0)
/System/Library/Frameworks/Foundation.framework/Versions/C/Foundation (compatibility version 300.0.0, current version 1770.255.0)
/System/Library/Frameworks/ImageIO.framework/Versions/A/ImageIO (compatibility version 1.0.0, current version 1.0.0)
/usr/lib/libobjc.A.dylib (compatibility version 1.0.0, current version 228.0.0)
我认为 python3 模块链接正确。
我应该在哪里以及如何解决这个问题?
我虽然熟悉python3,但不熟悉python2
andboost-python
任何建议都有帮助。
RenderEngine.h
/*
==============================================================================
RenderEngine.h
Created: 19 Feb 2017 9:47:15pm
Author: tollie
==============================================================================
*/
#ifndef RENDERENGINE_H_INCLUDED
#define RENDERENGINE_H_INCLUDED
#include <random>
#include <array>
#include <iomanip>
#include <sstream>
#include <string>
#include "Maximilian/maximilian.h"
#include "Maximilian/libs/maxiFFT.h"
#include "Maximilian/libs/maxiMFCC.h"
#include "../JuceLibraryCode/JuceHeader.h"
using namespace juce;
typedef std::vector<std::pair<int, float>> PluginPatch;
typedef std::vector<std::array<double, 13>> MFCCFeatures;
class RenderEngine
{
public:
RenderEngine (int sr,
int bs,
int ffts) :
sampleRate(sr),
bufferSize(bs),
fftSize(ffts),
plugin(nullptr)
{
maxiSettings::setup (sampleRate, 1, bufferSize);
}
virtual ~RenderEngine()
{
if (plugin != nullptr)
{
plugin->releaseResources();
delete plugin;
}
}
bool loadPlugin (const std::string& path);
void setPatch (const PluginPatch patch);
const PluginPatch getPatch();
void renderPatch (const uint8 midiNote,
const uint8 midiVelocity,
const double noteLength,
const double renderLength);
const MFCCFeatures getMFCCFrames();
const MFCCFeatures getNormalisedMFCCFrames (const std::array<double, 13>& mean,
const std::array<double, 13>& variance);
const std::vector<double> getRMSFrames();
const size_t getPluginParameterSize();
const String getPluginParametersDescription();
bool overridePluginParameter (const int index,
const float value);
bool removeOverridenParameter (const int index);
const std::vector<double> getAudioFrames();
bool writeToWav(const std::string& path);
private:
void fillAudioFeatures (const AudioSampleBuffer& data,
maxiFFT& fft);
void ifTimeSetNoteOff (const double& noteLength,
const double& sampleRate,
const int& bufferSize,
const uint8& midiChannel,
const uint8& midiPitch,
const uint8& midiVelocity,
const int& currentBufferIndex,
MidiBuffer& bufferToNoteOff);
void fillAvailablePluginParameters (PluginPatch& params);
double sampleRate;
int bufferSize;
int fftSize;
maxiMFCC mfcc;
AudioPluginInstance* plugin;
PluginPatch pluginParameters;
PluginPatch overridenParameters;
MFCCFeatures mfccFeatures;
std::vector<double> processedMonoAudioPreview;
std::vector<double> rmsFrames;
double currentRmsFrame;
};
#endif // RENDERENGINE_H_INCLUDED
解决方案
推荐阅读
- angular - 离子/角度离开页面事件
- reactjs - React Router V4 使用 Material UI 在 ListItem 中实现 NavLink
- python-3.x - 将数组拆分为数组数组python
- c - 为什么我不能以这种方式复制终止的 null ?
- sql - 如何查找没有子节点的树节点
- excel - 表格多列Excel中最常见的值
- react-native - addImageFromBase64 的使用
- javascript - 在 JavaScript 中将 Uint8Array 转换为 Float64Array
- botframework - 完全限定文件名必须少于 260 个字符,目录名必须少于 248 个字符
- haskell - 获取循环列表的第一个重复元素